WebmeticDocs
Get startedDetectEnrichPersonalizeIntegrateManagePartnersDevelopers

Enrichment list

An Enrichment list collects domains for which Webmetic adds company data, with one row per domain.

For example, you send the domains of your trade show contacts to a list. Webmetic adds industry, employee count, and phone number to each row, or closes the row without data.

Lists belong to your account. The API returns the same lists your team sees in the Enrichment tab.

Every endpoint needs the Enrichment key, not the Visitor Intelligence key, as described under Authentication.

Enrichment currently costs no credits. For details, see Credits in the API.

List

A list has no status of its own and is finished when pending_rows is 0. How to wait for that is described in Asynchronous results.

FieldTypeExampleDescription
idstring"6717a3c2e4b0a1f2c3d4e5f6"ID of the list, 24 characters
namestring"Messe-Kontakte Oktober"Name with 1 to 200 characters. Names don't have to be unique
descstring"Gespräche am Messestand"Description with up to 1,000 characters, empty if there is none
created_atstring"2026-10-22T09:15:04.512000"When the list was created, in UTC
updated_atstring"2026-10-22T09:15:04.512000"Time of the last change, currently the same as created_at
total_rowsinteger120All rows in the list
done_rowsinteger104Rows with done, shown as Found in the dashboard
miss_rowsinteger16Rows with miss, shown as Not found in the dashboard
pending_rowsinteger0Rows with pending or enriching, shown as Pending in the dashboard

A new list has 0 in every count. How the API writes timestamps is described in Date ranges and time zones.

You can delete a list only in the dashboard, and you currently can't rename it.

Row

A row stands for one domain in a list. Each row starts with six fields of its own, followed by the company's data fields. In /rows every row has all fields, and unknown values are null.

FieldTypeExampleDescription
idstring"6717a3c2e4b0a1f2c3d4e601"ID of the row, 24 characters
domainstring"bergquell.example"The shortened domain. If the website redirects to a domain Webmetic already knows, that domain appears here afterwards
statusstring"done"State of the row, see below
srcstring or null"db"Where the data comes from: db from existing data, ext newly gathered, miss not found. null while the row is open
created_atstring"2026-10-22T09:15:09.207000"When the row was created, in UTC
enriched_atstring or null"2026-10-22T09:16:02.418000"When the row became done or miss. null before that

You can edit or remove rows only in the dashboard. Webmetic enriches each row once and doesn't update it afterwards.

Status

statusMeaningIn the dashboard
pendingThe row is waiting to be processedEnriching
enrichingWebmetic is enriching the row right nowEnriching
doneWebmetic found dataEnriched
missWebmetic found no usable dataNot found

A new row starts as pending and changes to enriching once Webmetic works on it. It ends up as done or miss, and both values are final. While Webmetic still has to read the website, a row can go from enriching back to pending.

Companies Webmetic already knows are finished after about a minute. If Webmetic first has to read the website, it can take hours to a few days.

Because Webmetic writes the data fields in several steps, a row with enriching can already be partly filled. A row with done can still have fields with null if Webmetic doesn't know a value. A row with miss keeps the placeholder as its name and the domain. After technical errors it can also carry some data fields.

Data fields

The data fields are flat, and every value is a string or null. Ranges, industries, and descriptions are always in German, even if your dashboard shows English.

FieldTypeExampleDescription
company_namestring or null"Bergquell Mineralbrunnen GmbH"Name of the company. Until data arrives, it holds a placeholder from the domain such as Bergquell
company_urlstring or null"bergquell.example"Website address without www.. After enrichment it is the address the website answers on. This address can therefore contain a subdomain and differ from domain
company_logo_urlstring or null"https://logos.docs.example/bergquell.png"Address of the logo
industrystring or null"Industrie & Fertigung"Industry as a German label. Several industries are comma-separated, the main one first
nace_codesstring or null"11.07"NACE codes, separated by a comma and a space
wz2025_codesstring or null"11.07.0"WZ 2025 codes, separated like nace_codes
employee_countstring or null"201–500"Employee count as a range: 1–10, 11–50, 51–200, 201–500, 501–1.000, 1.001–5.000, 5.001–10.000, or 10.000+
revenuestring or null"50–100 Mio. €"Annual revenue as a range, from < 100 Tsd. € to > 500 Mio. €
addressstring or null"Brunnenweg 4"Street and house number
postal_codestring or null"85354"Postal code
citystring or null"Freising"City
countrystring or null"DE"Country as a two-letter ISO code. If the country can't be mapped, this holds the name as found
phone_numberstring or null"+49 89 99998214"General phone number
fax_numberstring or nullFax number
email_addressstring or null"info@bergquell.example"General email address of the company
directorsstring or null"Florian Obermaier"Managing directors, comma-separated
organization_typestring or null"business"Type of organization, not the legal form: business (company), academic (education and research), government (public authority), isp (internet or hosting provider), or non_entity (no organization)
vat_idstring or null"DE000000000"VAT ID
tax_numberstring or null"115/000/00000"Tax number
registration_numberstring or null"HRB 000000"Commercial register number
registration_courtstring or null"Amtsgericht München"Register court
short_description_destring or nullShort description
full_description_destring or nullFull description
what_they_do_destring or nullWhat the company does
how_they_make_money_destring or nullBusiness model
target_audience_destring or nullTarget audience
linkedin, facebook, instagram, youtube, twitterstring or null"https://www.linkedin.com/company/bergquell-mineralbrunnen-example"The company's profile on that network. For LinkedIn, company pages only
primary_color, secondary_colorstring or null"#1f6feb"Main and secondary color from the logo as a hex value

Differences from Company

The data fields resemble the Company object from Visitor Intelligence, but they have a different, flat shape:

  • Link: rows have no company_id. To join them to visit data, compare domain with company_url from Company, shortened to the domain without www. and subdomain.
  • Ranges: employee_count and revenue are strings such as 201–500, in Company two numbers [min, max].
  • Codes: nace_codes and wz2025_codes are comma-separated codes, in Company objects with descriptions.
  • Directors: directors is one string, in Company a list.
  • Country: country is the ISO code, and there is no country_code field.
  • Other fields: scores such as relevance_score and English descriptions are missing. In return, industry is added.

Rules for domains

POST /enrichment/lists/{list_id}/domains takes 1 to 5,000 entries per request. For more domains, send further requests to the same list.

Webmetic shortens every entry to the main domain:

  • Webmetic removes the protocol, path, port, www., and subdomains, and writes everything in lowercase.
  • From an email address, the part after the @ remains.
  • So https://www.your-website.com/contact, shop.your-website.com, and info@your-website.com all become your-website.com.
  • Because a platform subdomain becomes the platform's domain, enter the company's own domain.

The response with status 202 contains only counts, no rows:

  • added: new rows in the list.
  • skipped_existing: domains already in the list. Webmetic doesn't add them a second time, but the same domain may be in another list.
  • invalid: entries without a domain, for example a company name.

If a domain appears several times in the same request, Webmetic adds it once and doesn't count the repeats.

New lists, new domains, and single lookups only work during the trial and on the Growth and Enterprise plans. Otherwise the API answers with 403 and PLAN_REQUIRED.

On Starter and Free you can still read and export lists. The exception is an account that can't use Enrichment at the moment, for example after a cancellation. For such an account, every Enrichment call answers with 403 and ACCOUNT_NOT_ELIGIBLE, as described under Errors.

Pages, filters, and export

GET /enrichment/lists and GET /enrichment/lists/{list_id}/rows return the newest entries first, page by page with page and page_size, as described under Pagination.

The status filter takes pending, enriching, done, or miss, and total then counts only the matching rows. Any other value returns status 422 with VALIDATION_ERROR.

GET /enrichment/lists/{list_id}/export returns every row of a list in one response as a CSV file. The file is encoded in UTF-8 with a BOM, uses commas as separators, and has German column names such as Branche and Mitarbeiter.

Single lookup

GET /enrichment/company returns the same data fields for one domain in the company object. Next to it are "status": "found" and the shortened domain.

Empty fields are left out there instead of being null. The company object doesn't contain the id, status, and src fields or the timestamps of a row. industry there names only the main industry.

If Webmetic knows the domain, the API answers at once. Unknown domains take hours to a few days, as described under Asynchronous results.

If Webmetic cannot read the website or finds no company data there, the API answers with 404 and "status": "not_found".

The single lookup creates no row and doesn't appear in the dashboard.

Example

The first example shows a finished list:

GET /enrichment/lists/6717a3c2e4b0a1f2c3d4e5f6
{
  "list": {
    "id": "6717a3c2e4b0a1f2c3d4e5f6",
    "name": "Messe-Kontakte Oktober",
    "desc": "Gespräche am Messestand",
    "created_at": "2026-10-22T09:15:04.512000",
    "updated_at": "2026-10-22T09:15:04.512000",
    "total_rows": 120,
    "done_rows": 104,
    "miss_rows": 16,
    "pending_rows": 0
  }
}

The second example shows the first page of its rows with done, with one row per page:

GET /enrichment/lists/6717a3c2e4b0a1f2c3d4e5f6/rows?status=done&page_size=1
{
  "rows": [
    {
      "id": "6717a3c2e4b0a1f2c3d4e601",
      "domain": "bergquell.example",
      "status": "done",
      "src": "db",
      "created_at": "2026-10-22T09:15:09.207000",
      "enriched_at": "2026-10-22T09:16:02.418000",
      "company_name": "Bergquell Mineralbrunnen GmbH",
      "company_url": "bergquell.example",
      "company_logo_url": "https://logos.docs.example/bergquell.png",
      "industry": "Industrie & Fertigung",
      "nace_codes": "11.07",
      "employee_count": "201–500",
      "revenue": "50–100 Mio. €",
      "city": "Freising",
      "country": "DE",
      "phone_number": "+49 89 99998214",
      "email_address": "info@bergquell.example",
      "short_description_de": "Mineralbrunnen mit eigener Abfüllung für Mineralwasser und Erfrischungsgetränke.",
      "full_description_de": null,
      "what_they_do_de": null,
      "how_they_make_money_de": null,
      "target_audience_de": null,
      "linkedin": "https://www.linkedin.com/company/bergquell-mineralbrunnen-example",
      "facebook": null,
      "instagram": null,
      "youtube": null,
      "twitter": null,
      "directors": "Florian Obermaier",
      "organization_type": "business",
      "address": "Brunnenweg 4",
      "postal_code": "85354",
      "vat_id": "DE000000000",
      "tax_number": null,
      "registration_number": "HRB 000000",
      "registration_court": "Amtsgericht München",
      "fax_number": null,
      "primary_color": "#1f6feb",
      "secondary_color": null,
      "wz2025_codes": "11.07.0"
    }
  ],
  "total": 104,
  "pagination": [
    {
      "total": 104,
      "page_total": 104,
      "isFirst": true,
      "current": 1,
      "isLast": false,
      "page_size": 1
    }
  ]
}

The values are invented, and bergquell.example is only an example. The API itself accepts only real domains and counts entries ending in .example as invalid.

Used by

On this page