Skip to main content

Layers

A Data Enrichment job is built from layers. Each layer adds a group of columns to your output, and you pay per row for each layer you select. This page explains what every layer does, which layers you can combine, and how to fetch the current prices.

Only need to know who changed jobs?

If you only want to check whether contacts are still at their company or have moved on, use the dedicated Career Monitor API. It is a simpler, single-purpose API with Lite and Full tiers. Use Data Enrichment when you also want company addresses, new-company details or mobile numbers in the same job.

At a glance​

CodeLayerAnswers the questionRuns on
L1Career MonitorIs this person still at this company? What is their current title and email?Every row that passes the input check
L2Company LocationWhere is the company headquartered, and what is its main phone number?Every row that passes the input check
L3New CompanyIf they left, where did they go, and what is their new title and email?Only rows where L1 found the contact left the company
L4New Company LocationWhere is the new company headquartered?Only rows where L3 found a new company name and website
MPAMobile Phone AppendWhat is this person's mobile or direct phone number?Rows with first name, last name and company

Choosing layers​

Layers build on each other, so they must be selected in order:

Valid selectionWhat you get
["L1"]Employment check only
["L1", "L2"]Employment check + current company HQ
["L1", "L2", "L3"]Above + where job-changers went
["L1", "L2", "L3", "L4"]Above + the new company's HQ
"full"Every active layer, including MPA

You can add "MPA" to any of the selections above, for example ["L1", "MPA"].

These selections are rejected with 400:

  • MPA on its own. It must be paired with at least one other layer.
  • Skipping a layer, for example ["L1", "L3"] (L3 needs L2) or ["L2"] (L2 needs L1).
  • Unknown layer codes.

Input requirements​

Each row must contain enough information to identify the person. A row qualifies if it has a company name or company website, plus either:

  • a LinkedIn URL, or
  • a first name and last name.

Rows that don't qualify are kept in your output in their original position, but no layer runs on them. Their enrichment columns are empty, the row status is skipped, and they are not billed.

Use field_mapping on Submit to map your column names to linkedin_url, first_name, last_name, company_name and email.

Layer details​

The column names below are the keys you get in enriched_fields on Result, and the headers in the CSV download. A column is empty when the layer ran but found no value.

L1 — Career Monitor​

The foundation layer, required for every job. It confirms who the person is, finds their LinkedIn profile, and checks whether they are still employed at the company you supplied. For people who are still there, it returns their current title, a verified work email and their location.

How it works:

  1. Cleans and normalizes the name, company name, website and LinkedIn URL you sent.
  2. Finds the person's LinkedIn profile if you didn't provide one.
  3. Compares their current employer against the company on your row.
  4. When the profile is ambiguous, it looks for other public evidence of employment before deciding.
  5. Generates and verifies a work email, and classifies the title into a job level and job function.
ColumnDescription
Employment statusThe outcome of the check, for example Still in the company, Left the company or Uncertain.
First name / Last nameThe matched person's name, cleaned.
Name Match Confidence ScoreHow closely the matched profile's name matches your input.
Linkedin URLThe person's LinkedIn profile.
Other proof of employmentA public URL used as evidence when LinkedIn alone was not conclusive.
Current company nameThe cleaned company name.
WebsiteThe company website.
Current titleThe person's current job title.
Job level / Job functionThe title classified into seniority (for example VP or Manager) and department (for example Sales or Engineering).
EmailA verified work email at the current company.
Tenure end dateWhen the person left, if they left the company.
Contact city / Contact state / Contact state abbreviationThe person's location.
Contact country / Contact country abbreviationThe person's country.
Same check, different API

L1 does the same job as the standalone Career Monitor API. If L1 is all you need, the Career Monitor API is the simpler choice.

L2 — Company Location​

Adds the headquarters address and main phone number for the contact's current company (from L1). The address is validated, and city, state and country are normalized to consistent casing and standard abbreviations.

Requires: L1.

ColumnDescription
Company addressThe full HQ address on one line.
Company streetStreet line.
Company cityCity.
Company State / Company State abbreviationState or region, full and abbreviated (for example California / CA).
Company country / Company country abbreviationCountry, full and abbreviated.
Company postal codePostal or ZIP code.
Company HQ phoneThe headquarters switchboard number, formatted.

L3 — New Company​

For people who have left the company on your row, this layer finds where they work now: the new employer, their new title and start date, and a verified email at the new company.

Requires: L1 and L2. It runs only on rows where L1 reported the person left the company. Every other row is not processed by L3 and is not billed for it.

ColumnDescription
New CompanyThe new employer's name.
New company websiteThe new employer's website domain.
New titleThe person's title at the new company.
New company job level / New company job functionThe new title classified into seniority and department.
New Company start dateWhen they started at the new company.
New company emailA generated and verified work email at the new company.

L4 — New Company Location​

The L2 equivalent for the new employer found by L3: headquarters address and phone number.

Requires: L1, L2 and L3. It runs only on rows where L3 found both a new company name and a website.

ColumnDescription
New Company AddressThe full HQ address on one line.
New Company StreetStreet line.
New Company CityCity.
New Company State / New Company State AbbreviationState or region, full and abbreviated.
New Company Country / New Company Country AbbreviationCountry, full and abbreviated.
New Company Postal CodePostal or ZIP code.
New Company HQ PhoneThe new company's headquarters number, formatted.

MPA — Mobile Phone Append​

Looks up personal contact numbers for the person. MPA runs in parallel with the other layers rather than after them, so it doesn't add time to the job.

Requires: at least one other layer (it cannot run alone). It runs only on rows with a first name, last name and company name.

ColumnDescription
Mobile phoneThe person's mobile number.
Contact phoneA direct-dial or other contact number, formatted.

Billing per layer​

  • The price per row is the sum of the prices of the layers you selected. Get current prices from the endpoint below, or estimate a whole job with Estimate.
  • A row is billed only if at least one requested layer returned data (row status: enriched). Skipped and failed rows are refunded.
  • Check layer_status on each Result row to see which layers returned data for that row, for example { "L1": "enriched", "L2": "enriched" }.

Endpoint​

Returns the layer catalog with the current per-row price for each layer. Prices can differ per account, so call this endpoint rather than hard-coding them.

Method: GET Path: /data-enrichment/layers/ Full URL: https://backend.ecoreservice.com/api/v1/data-enrichment/layers/ Auth: Authorization: Token YOUR_API_TOKEN (or Bearer) — see Authentication

Example Request​

curl "https://backend.ecoreservice.com/api/v1/data-enrichment/layers/" \
-H "Authorization: Token YOUR_API_TOKEN"

Successful Response — 200 OK​

{
"success": true,
"data": {
"layers": [
{ "layer_code": "L1", "label": "Career Monitor", "credits_per_row": "0.5000", "is_active": true, "configured": true },
{ "layer_code": "L2", "label": "Company Location", "credits_per_row": "0.2500", "is_active": true, "configured": true },
{ "layer_code": "L3", "label": "New Company", "credits_per_row": "0.3500", "is_active": true, "configured": true },
{ "layer_code": "L4", "label": "New Company Location", "credits_per_row": "0.2500", "is_active": true, "configured": true },
{ "layer_code": "MPA", "label": "Mobile Phone Append", "credits_per_row": "1.0000", "is_active": true, "configured": true }
]
}
}
FieldTypeDescription
layer_codestringThe code to pass in selected_layers.
labelstringHuman-readable layer name.
credits_per_rowstring (decimal)Credits charged per enriched row for this layer.
is_activebooleanWhether the layer can currently be selected. "full" includes only active layers.
configuredbooleanWhether pricing has been set up for your account.