B2B CRM Enricher — Clean, Dedupe & Enrich Lists (AI)
Pricing
from $100.00 / 1,000 record enricheds
B2B CRM Enricher — Clean, Dedupe & Enrich Lists (AI)
Hand it a messy list of companies; get back a clean, deduplicated, enriched CRM-ready file. Derives the domain, fills firmographics and contacts, flags duplicates, verifies emails and scores data completeness.
Pricing
from $100.00 / 1,000 record enricheds
Rating
0.0
(0)
Developer
Fredrik Hansson
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Hand it a messy list of companies; get back a clean, deduplicated, enriched CRM-ready file. Exports, form fills, scraped lists and trade-show spreadsheets all arrive the same way: inconsistent columns, half-filled rows, the same company three times under three spellings. This Actor fixes that in one pass. It derives the real company domain for every row, collapses duplicates that share a domain, fills in firmographics and contacts, verifies the emails you already have, and scores how complete each record is — so what lands back in your CRM is clean, unique and usable.
You bring the mess. It hands back a deduplicated, enriched call sheet.
The flow
messy list → derive domain → dedupe → enrich → verify emails → clean file(any columns: (website → email (collapse (firmographics (SMTP verdict (one row percompany, email, → company name) rows that + contacts + on provided unique company,website, domain) share a socials + emails) scored fordomain) ICP fit) completeness)
- Load your rows from
records(paste objects) or an existingdatasetId. - Derive the domain for each row — from a website/domain field, else the email domain (business domains only, free webmail is ignored), else a best-effort guess from the company name.
- Dedupe by domain — rows sharing a domain collapse into one, keeping the most complete row as the primary and counting how many collapsed (
duplicateCount). - Enrich every unique domain with firmographics, description, size signal, contacts, socials and optional ICP fit.
- Verify the email each row provided (syntax, MX, live SMTP probe) and attach a deliverability status + confidence.
- Score completeness 0–100 per record and push one clean row per unique company.
What you get per unique company
domain— the derived, normalised company domain (the dedupe key).name,industry,description,sizeSignal— firmographics filled in by AI from the company's own website.emails,socials— contact emails and social profiles discovered during enrichment.providedEmail,emailStatus,emailConfidence— the email that came in on your row, plus its deliverability verdict (deliverable/risky/undeliverable/ …) and a 0–100 confidence.icpFitScore— 0–100 fit against what you sell (only when you setoffering).duplicateCount— how many of your input rows collapsed into this record (1 = no duplicates).completeness— 0–100 score of how many key CRM fields are now filled, so you can sort worst-first and chase the gaps.input— your original row, untouched, for traceability.
Three ways people use it
- CRM data cleaning / RevOps hygiene — "clean my CRM export": drop a HubSpot/Salesforce/Pipedrive export in and get back a normalised, domain-keyed, completeness-scored file ready to re-import. No more blank industry columns or mystery rows.
- List deduplication — merge several lists (events, webinars, scraped leads, partner referrals) and let the Actor collapse everything that shares a company domain into a single golden record, with
duplicateCountshowing how dirty the raw list really was. - Lead enrichment waterfall — feed a thin list (just company names, or just emails) and let it fan out into full firmographics + verified contacts, the classic enrichment waterfall, but as one no-code step you can run from your CRM or an AI agent.
Input
| Field | Type | Notes |
|---|---|---|
records | array | Raw CRM rows as objects. Each row may carry any of company / name, domain, website, email. The domain is derived automatically. |
datasetId | string | Alternative to records: ID of an existing dataset to read rows from (e.g. another scraper's output). Each item is treated as a raw row. |
offering | string | Optional. What you sell — adds an icpFitScore (0–100) to every record. |
verifyEmails | boolean | Default true. Verify the email each row provided (syntax, MX, live SMTP probe). |
maxResults | integer | Max input rows to process. Default 1000. One charge per unique company after dedupe. |
model | string | Override the enrichment model. Default gpt-4o-mini. |
Provide either records or datasetId (or both).
Minimal input example
{"records": [{ "company": "Stripe", "website": "https://stripe.com" },{ "email": "info@stripe.com" },{ "company": "Notion", "website": "notion.so" }],"verifyEmails": true}
Or point it at a dataset:
{"datasetId": "aBcDeFgHiJkLmNoPq","offering": "Outbound sales tooling for B2B SaaS teams","verifyEmails": true}
The two Stripe rows above collapse into one record (duplicateCount: 2); Notion comes back as a second record.
Output example
{"input": { "company": "Stripe", "website": "https://stripe.com" },"domain": "stripe.com","name": "Stripe","industry": "Financial technology / payments","description": "Stripe builds economic infrastructure for the internet — payments, billing and financial APIs for businesses.","sizeSignal": "Large enterprise (thousands of employees)","emails": ["support@stripe.com"],"socials": {"linkedin": "https://www.linkedin.com/company/stripe","twitter": "https://twitter.com/stripe"},"providedEmail": "info@stripe.com","emailStatus": "risky","emailConfidence": 55,"icpFitScore": null,"duplicateCount": 2,"completeness": 88}
How it works
Under the hood this Actor is an orchestrator — it does the cleaning, domain derivation and deduplication itself, then calls two proven public Actors for the heavy lifting:
- Firmographics + contacts →
noniner/ai-company-enrichment, once across all unique domains. It visits each company's site and uses OpenAI to extract name, industry, description, size signal, emails, socials and (if you setoffering) an ICP fit score. - Email verification →
noniner/b2b-email-verifier, once across all provided emails. It runs an RFC syntax check, MX lookup and a live SMTP mailbox probe, returning a status and a 0–100 confidence. (Fully deterministic — no extra API keys.)
Both organs are best-effort: if one returns nothing, the run still completes with whatever could be derived.
Pay-per-event pricing
| Event | Price | Charged when |
|---|---|---|
record-enriched | $0.10 | Once per unique company record cleaned, deduplicated and enriched (after dedupe — duplicates are free). |
You're billed per unique company, not per messy input row, so a list that's 40% duplicates costs 40% less than it looks.
Setup
The enrichment organ calls the OpenAI API. Set the environment variable / secret OPENAI_API_KEY on the Actor. Deduplication, domain derivation and email verification run without it — only the firmographic fields are left empty if it's missing.
Use it from an AI agent (Apify MCP server)
This Actor is available through the Apify MCP server, so AI agents (Claude, ChatGPT, or anything that speaks MCP) can call it as a tool — hand it records or a datasetId, and read back the clean, deduplicated, enriched file — with no custom integration code.
Run it locally
npm install# put your input in storage/key_value_stores/default/INPUT.jsonexport OPENAI_API_KEY=sk-... # enables the enrichment organapify run -p
Chain it
This Actor is a building block in the No Niner B2B suite. Wire it to the next step with no code in the Integrations tab (trigger: Run succeeded → start the next Actor), or run them in sequence.
- ⬆️ Upstream: B2B Lead List Builder — feed its dataset straight in via the
datasetIdinput. - ⬇️ Next: B2B Intent Radar — score the cleaned list.
- ⬇️ Next: B2B Stakeholder Mapper and B2B Cold Email Sequence Writer — map who to contact and write the outreach.
Related actors
- AI Company Enrichment — Turn a list of domains into structured company profiles — firmographics, contacts, socials and ICP fit.
- B2B Email Verifier — Give email addresses; get a deliverability verdict per email — syntax, MX, live SMTP probe and a risk score.
- B2B Lead List Builder — Build a targeted list of B2B companies and contacts from a simple description of who you want to reach.
- AI Cold Email Personalizer — Turn a list of domains into personalized cold-email openers — AI reads each company's site.
Part of the No Niner toolkit — no-code web scraping, enrichment & AI data tools, all pay-per-use. Browse the full set at noniner.io.