Form Enrichment API: Fill Company Fields From a Work Email
Turn the work email a visitor types into company, size and tech fields and drop form questions. Billed per call, and empty records bill too.

Shorten a lead form by looking the company up from the work email. Paste this into your agent:
Set up https://monid.ai/SKILL.md, and then use Monid to look up the company behind the domain figma.com and give me its name, industry, employee range, headquarters country and tech stack, and tell me which fields came back empty.
One prompt turns a domain into form-ready fields. 1 min setup · 3-8 hrs saved.
A visitor types name@acme.com into your form, and then your form asks them for the company name, the size, the industry and the country. All four can be read from the domain they just gave you, so every one of them is a question you charge them time for and did not need to ask. This guide shows how to look the company up while the form is still open, what came back when we ran it on 2026-10-16, and the empty record that still bills. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.
Disclosure: you are on the Monid blog, Monid sells the endpoint used here, and TinyCommand is a content partner. TinyCommand is not in the Monid catalogue, and what we say about it comes from its public site.
What is the easiest way to enrich a form from the email a visitor types?
Monid. Install it once, add a key, and your agent or your form backend calls a company lookup with the domain from the email and gets a typed record back, with no data contract to sign first.
- Pay per call. One lookup is billed at $0.0049 (Verified 2026-10-16 on the company enrichment tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
- One install, every API. The same key and balance call the company lookup, an email verifier and every other tool on Monid, so a second data source is a parameter, not a new vendor. The same Hunter provider also finds the addresses at a domain.
- Lives inside your agent. Install the CLI, add your key, run the prompt above, and the lookup is there whenever the agent needs it. Your agent reads
SKILL.mdand learns the rest, so setup is about a minute.
At that price, enriching 1,000 form submissions costs about $4.90 (Verified 2026-10-16).
How do you turn a typed email into company fields?
Split the address at the @, drop the personal providers, and send the domain to the lookup. The endpoint is /companies/find from the provider hunterio. It takes one required domain such as figma.com, and the free /domain-finder endpoint from the same provider turns a company name into candidate domains when all you have is a name.
| Route | What you get | Cost shape | Fits |
|---|---|---|---|
| Form tool with built-in enrichment | Fields filled inside one product | Plan or seat | Teams already on that product |
| Database vendor | A stored record per company | Often an annual contract | Large, long-lived lists |
| Build your own scraper | Whatever you parse | Your hours | A fixed few domains |
| Monid company lookup | A typed record per domain | Pay per call, buy flexibly | Forms, signup flows, agents |
Monid fits a form because the traffic is bursty: you pay for the submissions that arrive and nothing while the form is quiet.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the discover, inspect and run workflow itself. More in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main
Inspect, then run one
monid inspect -p hunterio -e /companies/find
monid run -p hunterio -e /companies/find --query '{"domain":"figma.com"}' -w
Resolve a name to a domain first
When the form collects a company name instead of an email, the free endpoint returns ranked candidates:
monid run -p hunterio -e /domain-finder --query '{"company":"Figma","limit":3}' -w
On 2026-10-16 that returned three rows: figma.com with 1,418 indexed email addresses, figma.camp with 0 and figma.one with 2. Take the top row only when it is clearly the right one, and otherwise ask the visitor. The call billed $0 (Verified 2026-10-16).
Skip the personal providers
A gmail.com address has no company behind it, and looking it up wastes a call. Check the domain against a short list before you call:
FREE_MAIL = {"gmail.com", "yahoo.com", "outlook.com", "hotmail.com", "icloud.com", "proton.me"}
def company_domain(email: str) -> str | None:
domain = email.rsplit("@", 1)[-1].lower().strip()
return None if domain in FREE_MAIL else domain
Give this to your agent![]()
Set up https://monid.ai/SKILL.md, and then use Monid to take this list of work emails, drop the personal-provider ones, look up each company domain, and give me a table with name, industry, employee range, country and which fields were empty.Can you build form enrichment yourself?
Yes, for a few domains it is an afternoon. You fetch the company's home page, read the title and meta description, guess the industry from the text, and call a geolocation service for the country. That gives you a name and a sentence.
What it does not give you is a classification at four levels, an employee range, a headquarters address or a tech list, because none of those are printed on the home page. Each needs a data source, and each source comes with its own matching rules, its own misses and its own upkeep. A free company enrichment API usually means the first of those: a name and a description.
The Monid route is the choice when the form is in production. The lookup and its maintenance sit behind one call, you read typed JSON instead of parsing HTML, and a lookup is $0.0049 (Verified 2026-10-16). For a one-off analysis of a single target, analysing a company from its URL covers the account-brief version of the same idea.
Which form questions can an enrichment record replace?
The company name, industry, size band, country and city, and a tech list nobody would ever type in. We ran /companies/find on figma.com on 2026-10-16, so the fields below are what came back.
What the record held
{ "name": "Figma", "legalName": "Figma", "domain": "figma.com",
"category": { "sector": "Industrials", "industryGroup": "Commercial & Professional Services",
"industry": "Professional Services", "subIndustry": "Design" },
"foundedYear": 2012,
"geo": { "city": "San Francisco", "state": "California", "stateCode": "CA",
"country": "United States", "countryCode": "US" },
"type": "private",
"metrics": { "trafficRank": "very_high", "employees": "1K-5K", "employeesCount": 3134 },
"linkedin": { "handle": "company/figma" },
"tech": ["amazon-web-services", "next-js", "salesforce", "stripe", "zendesk", "..."],
"indexedAt": "2026-06-18" }
The record also held ten descriptive tags, a one-line description, a logo URL, a time zone and coordinates. Classification arrives at four levels, so you can route on the sector and report on the sub-industry. Size arrives twice, as the band 1K-5K and the exact count 3134: the band is what a routing rule wants, the count is what reporting wants. And tech held 45 entries across 19 categories, which is not a field any form would ask for.
Which of them change the next question
An enriched field is only worth removing a question for if something downstream uses it. A size band can pick the follow-up: a few thousand employees means ask about procurement and security review, a handful means skip them. A tech list showing a competing tool means ask about renewal timing instead of "do you use anything today". Sector can reveal a compliance question that nobody else needs to see. If a field would only land in a database, the visitor gains nothing from the lookup happening before they submit, which section seven picks up.
Which fields stayed empty on a famous company
Several. On Figma the Twitter handle, phone, Crunchbase handle, fundingRounds, raised, annualRevenue, estimatedAnnualRevenue, marketCap and parent company were all null or empty. So revenue and funding cannot drive a branch, even for a company everyone has heard of. Treat the identity, location, size band and tech fields as the usable layer and the money fields as a bonus.
What goes wrong when the lookup runs inside the form?
Five things, and the first costs real money.
Why does an empty record still bill?
Because only a 404 is free. The endpoint's price note says a miss costs nothing, and the second domain we tried, kingsplumbing.com, did not 404: it answered HTTP 200 with a record where the name was null, every category field was null, tags was null, tech was an empty array and employees was null. Only the domain, a logo URL and an indexedAt date of 2026-09-05 were set. That call billed the full $0.0049 (Verified 2026-10-16), the same as Figma.
So price your form on submissions, not on hits. And test for emptiness yourself:
def outcome(rec: dict | None) -> str:
if not rec or not rec.get("name"):
return "empty" # show the plain form
if not rec.get("metrics", {}).get("employees"):
return "thin" # prefill the name only, ask the rest
return "enriched"
Three outcomes, not two: enriched, thin and empty. A lookup that failed or timed out belongs with empty, and both should land on the plain version of the form.
Why does a famous domain return a noisy tech list?
Because detection reads what a site exposes. Figma's 45 entries mixed products you could sell into (salesforce, stripe, zendesk) with programming languages (c, rust, java), a protocol (http-3), a security header (hsts) and consumer services (youtube, microsoft-excel). If a rule asks "do they use Salesforce", read the list for that name. If a rule counts technologies, count only the categories you sell against, from techCategories. A detector that returns evidence per technology shows what a stricter read looks like.
Why is the lookup slow enough to notice?
It is a network call with a person watching the cursor. The tool page lists a median of about 1.9 seconds and a 95th percentile of about 2.7 seconds, and our two calls finished in about 1.2 and 1.0 seconds by their run timestamps. Fire it when the visitor leaves the email field, not when they arrive on it, and set a timeout after which the plain form shows. A form that waits on the lookup is worse than one that never looked.
How much do abandoned forms cost?
Every visitor who types an address and leaves is a billed call that produced no lead. On a top-of-funnel form that can be most of the visitors, so the spend scales with traffic, not with leads. Fire the lookup one field later, after the visitor has committed something else, and you pay mainly for people who stay. The same reasoning decides between a monthly floor and a meter: with a meter you pay for submissions and with a floor you pay for the month.
Why can the record be stale or wrong?
The record carries an indexedAt date, and ours said 2026-06-18 for Figma, about four months before the call. An office move or a hiring spike can sit between that date and today. If you prefill a visible field, show it as editable, say where it came from, and log which values the visitor changed. That correction log is the cheapest quality signal you can get on the endpoint you chose.
Which endpoint should I use for which job?
| Endpoint | What it does | Input | Billing | Price (Verified 2026-10-16) |
|---|---|---|---|---|
hunterio/companies/find | Company record from a domain: category, size, location, tech | domain (required) | Per call; only a 404 is free | $0.0049 |
hunterio/domain-finder | Company name to ranked candidate domains | company (3+ characters), limit, perfect_match | Per call | $0.00 |
Prices Verified 2026-10-16 with monid inspect. For the same provider's name-to-domain matching on a longer list, looking up companies by name goes through it. Use the free one first when the form collects a name, and the first one once you hold a domain. Other company endpoints exist on the same key; one with a per-result price or a minimum billing unit can bill more than its listed price, so inspect before you point a form at it.
When is another route a better fit?
Nothing branches on the answer. If the enriched fields only land in a database, enrich after submit. The visitor gains nothing by waiting, and you have put a failure mode on the critical path. That case is a workflow job, not a form job.
Your visitors are consumers. Company enrichment assumes a company. A personal address returns nothing useful, and a form that pauses to look up a consumer spends latency to learn nothing. Finding the person behind an address is a different job from finding a company.
Your form tool already does it. TinyCommand puts forms, workflows, a relational database and agents on one canvas, and a form there can call an external API while it is being filled and branch on the response. Its integrations run to several hundred. In that setup the form platform owns the branching and the record, and a company lookup like the one above is the outward call it makes. TinyCommand's pricing is on its own site.
You need revenue or funding. As the Figma record showed, the money fields can be empty even for a well-known company. A funding database or a manual check fits better.
And the disclosure: we resell this endpoint. The useful part of this post is free: treat every enriched field as optional, branch on the outcome, and price the form on submissions.
Conclusion
The quickest way to cut company questions from a lead form is one lookup per work email through Monid: $0.0049 a call (Verified 2026-10-16), one key for this and every other tool, about a minute to set up and ready inside your agent when you need it. On Figma it returned the name, four levels of classification, size as a band and a count, location, a LinkedIn handle and 45 tech entries from one domain.
Two things matter more than the endpoint. Empty records bill, so price on submissions and test for emptiness in your own code. And every enriched field is optional: a form that assumes all of them arrive will show blanks to a person who is watching.
How we estimated the time saved: choosing a company data source, writing the free-mail filter, and handling the thin, empty and failed outcomes is roughly 3 to 8 hours for a developer who has not done it before. The 1 minute is the install, key and first call once you already have a Monid key.
Free next step: run monid inspect -p hunterio -e /companies/find, then look up five of your own customers' domains and count how many come back with a name and an employee band. Start at monid.ai.
FAQ
What is form enrichment?
It is filling form fields from data you look up instead of asking the visitor to type it. A B2B form takes the work email, derives the domain, and reads the company name, industry, size and location from an enrichment record, so the form asks fewer questions.
Is this the same as progressive profiling?
No. Progressive profiling asks different questions across repeat visits, using what you already stored about a known contact. Enrichment works on the first visit with a stranger, because the domain they typed is enough to retrieve the record. The two combine: enrich on visit one, profile for what enrichment could not supply.
Is there a free company enrichment API?
Not free for the full record: through Monid a lookup is $0.0049 per call (Verified 2026-10-16), with no monthly plan and no minimum, and discovery and inspection cost nothing. The name-to-domain endpoint from the same provider is free.
Do I have to tell visitors I looked their company up?
You should. Show the prefilled fields as editable with a short note that they came from the domain. It reads as competence, it gets you corrections, and it avoids the visitor discovering a wrong value they never saw.
What happens when the domain is not found?
You can get either a 404, which is free, or an HTTP 200 with a record of nulls, which bills the full call price. Treat both the same way in the form: show the plain version and ask the questions yourself.
Published August 2026.

