Skip to main content

Get emails in Harmonic

Request contact emails for companies and people in console or via API

Written by Harmonic Team

Harmonic can enrich people with verified email addresses. Request emails from anywhere in console, or via the API. Each account gets 5,000 email requests per month, with the counter resetting on the first of each month.

A person is eligible for an email request when:

  • They don't already have an email recorded

  • They haven't been attempted in the last 30 days


In Console

You can request emails from any company or people search or list. Select the records you want (max 1,000 at a time), click the email icon, and confirm. Selections respect any filters applied.

The confirmation popup shows:

  • How many people are eligible

  • How many will be dropped, and why

  • How much of your monthly quota the request will use

Once submitted, emails appear on each person's profile as they come back.

Why some people get dropped

Reason

What it means

Already has an email

We already have an email on file for this person

Recently attempted

We tried to find an email for this person in the last 30 days. Retry after the cooldown

Not found

The LinkedIn URL didn't resolve to a person in Harmonic

Invalid URL

The input wasn't a recognizable LinkedIn profile URL

If every person you selected gets dropped, the request won't be submitted and nothing counts against your quota.

Monthly quota

Each customer account gets 5,000 pooled email requests per month, with the counter resetting on the first of each month

If a bulk request would exceed your remaining quota, you'll get an error telling you how many credits you need versus how many remain. Submit a smaller batch or wait for the reset.


Via API

The same workflow is available via the API for teams that want to run enrichment from their own systems.

Submit a bulk job

Submit up to 5,000 people in a single call. Provide exactly one of these arrays:

  • person_linkedin_urls — raw LinkedIn profile URLs

  • person_urns — Harmonic person URNs

Inputs that resolve to the same internal person are silently deduplicated. The endpoint canonicalizes URLs, resolves identifiers, filters eligibility, reserves quota, and returns a job_id.

Example response (200)

json

{   "job_id": "0d9aa949-235c-4d48-bb90-8cf716db0556",   "status": "PENDING",   "accepted_count": 1,   "dropped": [ ... ],   "monthly_remaining": 4999,   "created_at": "2026-05-07T15:30:00Z" }

Poll the job

The response always includes per-status counts. The results array is null until the job reaches a terminal status (COMPLETED or FAILED), at which point all per-person results are returned in a single response.

Job statuses

Status

Meaning

PENDING

Queued, waiting to start

IN_PROGRESS

Enrichment is running. Poll again in a few seconds

COMPLETED

Job finished. results is populated

FAILED

Fatal error. results is populated with whatever processed before failure

Per-item statuses

Status

Meaning

PENDING

Not yet processed

SUCCESS

An email was found and is now available on the person's profile

NOT_FOUND

No email could be found

FAILED

Enrichment errored for this person

SKIPPED

The person became ineligible after submit (rare, typically race conditions)

To fetch the resolved emails once a job is COMPLETED, call the enrich a person endpoint with each returned person_urn.

Check your monthly usage

Returns your team's current quota state. Use this before submitting a large batch to avoid 429s.

Response fields:

  • monthly_usage — emails enriched so far this month

  • monthly_limit — total emails your team can enrich each month

  • monthly_remainingmonthly_limit - monthly_usage

Counters reset at the start of each calendar month.

Errors

Code

Meaning

422 NO_ELIGIBLE_PEOPLE

Every submitted person was dropped. Check the dropped array for per-input reasons

429 MONTHLY_QUOTA_INSUFFICIENT

The request needs more credits than remain. Response includes needed, available, and submitted. Retry with fewer inputs or wait for the next reset

Drop reasons

  • NOT_FOUND — LinkedIn URL didn't resolve to a known person

  • INVALID_URL — input wasn't a recognizable LinkedIn profile URL

  • ALREADY_HAS_EMAIL — person already has an email recorded

  • RECENTLY_ATTEMPTED — person was attempted within the 30-day cooldown. Retry after expiry


Questions? Email support@harmonic.ai

Did this answer your question?