Skip to content

MaintenanceThe former company search endpoint goes into maintenance on November 9Migration guide

Endpoints // Bulk

Download job results

New

Last verified

Available inAPIMCPSDKCLI

Download the results of a completed or cancelled job as one CSV or NDJSON file, one row per item in the order sent, with your externalId, what was found and what it cost, for free.

GET/v2/jobs/:jobId/results

Credits

Free, also at a zero balance.

Introduction

The Download job results endpoint returns the results of a job you created as one file: one row per item, in the order you sent them, duplicates included, with your own fields and externalId first, then what was found for the item and what it cost. It is the links.results path of the job. By default the file is a CSV, the same file the app downloads; with format=ndjson, it holds one JSON object per item, for a program to read.

The file is ready once the job is completed or cancelled. Before that, and for a failed job, the request returns 409 JOB_RESULTS_NOT_READY. Follow the job with Get a job and download the file when links.results is set, or read the results as they come with Read job results by page.

A cancelled job gives the results of the items done, and the items it never started read skipped. It still finishes the items it had started, within the hour: until each one ends, its row reads running, and a file downloaded after that gives its outcome.

Downloading the results is free (0 credits), also at a zero balance, and as often as you need. It counts toward your per-minute rate limit like any other call. The key needs Person Enrichment or Contact, the permissions that read an enrich_persons job.

Authorization

NameTypeRequiredDescription
apikeystringYesYour API key from the developer dashboard. Pass it via Authorization: Bearer YOUR_API_KEY header.

Request

The route is GET /v2/jobs/:jobId/results.

Path parameters

NameTypeRequiredDescription
jobIdstringYesThe id of the job (UUID)

Query Parameters

NameTypeRequiredDescription
formatstringNocsv (default), or ndjson for one JSON object per line

Response structure

The response is the file itself, not a JSON envelope, and a large file is streamed: read the body to its end. A Content-Disposition header names the file after the job, ending in _enriched.csv or _enriched.ndjson.

CSV

With format=csv, the default, the file is Content-Type: text/csv; charset=utf-8. It is UTF-8 and starts with a byte order mark, so a spreadsheet opens accented names correctly.

The columns depend on the families of the job, never on its rows, so every row has the same header:

ColumnsWhat they hold
linkedinUrl, email, firstName, lastName, companyDomain, companyName, externalIdThe item as you sent it
rc_statusWhat happened to the item, see the table below
rc_messageThe same in a sentence, with the credits the item cost
rc_email, rc_email_statusWith contact_email: the email found, and found, not_found, error or skipped. With emailType: "any", rc_personal_email holds the personal email.
rc_phone, rc_phone_type, rc_phone_statusWith contact_phone: the number found, its type, and its status
rc_id, rc_first_name, rc_headline and the other rc_ profile columnsWith profile: one column per field of the Enrich profile response, nested fields joined with _, lists such as rc_experience as JSON. Without profile, only rc_linkedin_url, the profile the finders searched from.
rc_statusMeaning
enrichedEverything asked was found
partialPart of what was asked was found, such as the profile but no email
not_foundNothing was found; only a profile matched on the way to a finder is charged
duplicateThe same person as an earlier item, looked up once on that row: free
skippedNot run: the item had no field, nothing the families can look up, or the job was cancelled before it. Free.
insufficient_creditsNot run because your balance did not cover it when the job was created. Free.
invalid_inputThe item was rejected, such as an invalid Social profile URL. Free.
data_subject_blockedThis person asked not to be processed under GDPR or CCPA. Free.
rate_limited, errorThe lookup could not be done after retries. Free: send the item again later.
unknownThe lookup may have run but its result was not saved. It is not run again on its own.
runningA cancelled job had started the item and it has not ended yet. It ends within the hour: download the file again for its outcome.

NDJSON

With format=ndjson, the file is Content-Type: application/x-ndjson; charset=utf-8: one JSON object per item, one per line, in the order sent. Each object says what the CSV row says, typed, with the person in the shape of Enrich profile. Read job results by page returns the same objects, a page at a time.

FieldTypeDescription
rownumberPosition of the item in the job, from 1
inputobjectThe item as you sent it, externalId included, empty fields left out
statusstringThe rc_status of the item, see the table above
messagestringThe rc_message of the item, with the credits it cost
creditsConsumednumberCredits this item cost
personobject | nullThe person found: the full profile when isFullProfile is true. null when no one was found or the job did not ask for the profile.
isFullProfilebooleantrue when person is the full profile
linkedinUrlstringWithout profile in the job: the Social profile URL the finders searched from, as rc_linkedin_url
contactEmailobjectWith contact_email: status (found, not_found, error or skipped, null when the finder did not run), value, and personalValue with emailType: "any"
contactPhoneobjectWith contact_phone: status (found, not_found, error or skipped, null when the finder did not run), value and type

A job whose results were stored before NDJSON existed has its CSV only: format=ndjson returns 409 JOB_RESULTS_FORMAT_UNAVAILABLE.

Errors

The errors are JSON, in the envelope of every V2 response.

StatusCodeMeaning
404JOB_NOT_FOUNDNo enrich_persons job with this id in your workspace, or one your key may not read. A List job or a Search export has no results file here.
409JOB_RESULTS_NOT_READYThe job is still queued, running or paused, or it failed and has no file
409JOB_RESULTS_FORMAT_UNAVAILABLEformat=ndjson on a job whose results were stored before NDJSON existed: download its CSV
422VALIDATION_ERRORjobId is not a UUID, or format is not csv or ndjson

Code examples

Code Examples

curl https://api.reversecontact.com/v2/jobs/7b1e4c2a-5d3f-4e8b-9a6c-1f2d3e4b5a60/results \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o results.csv

Example response

The CSV below is cut after the first profile columns: the file carries every rc_ column of the profile. The NDJSON example cuts person after its first fields.

Example Response

linkedinUrl,email,firstName,lastName,companyDomain,companyName,externalId,rc_status,rc_message,rc_email,rc_email_status,rc_id,rc_public_id,rc_linkedin_url,rc_first_name,rc_last_name,rc_headline
https://www.social.com/in/janedoe,,,,,,crm-001,enriched,Profile and email found (4 credits),jane.doe@acme.com,found,prs_9f8e7d6c5b4a,janedoe,https://www.social.com/in/janedoe,Jane,Doe,VP of Marketing @ Acme Corp
,,John,Smith,acme.com,,crm-002,partial,"Profile found, no email (2 credits)",,not_found,prs_1a2b3c4d5e6f,john-smith,https://www.social.com/in/john-smith,John,Smith,Head of Sales at Acme