Auto-enrich new Airtable prospects from their website
When a new prospect with a website URL lands in your Airtable table, pull a clean company profile from their site and write every field back to the row.
Build a code workflow that enriches new prospects in my Airtable Prospects table by extracting a fixed company profile from their website using Firecrawl, and writes everything back to the same row.
Trigger: an Airtable poll trigger on the new_record event for the Prospects table. For each new record, read the website URL field and the Status field. If the URL is empty, do nothing. If the Status is already 'Enriched', skip the record so we do not spend Firecrawl credits enriching the same company twice.
Step 1: call Firecrawl's Extract Structured Data operation on the prospect's website URL with a fixed JSON schema. The schema is exactly these eight fields, all optional strings except employee_size which is a string enum and pricing_model which is a string enum: company_name, one_line_description, industry, hq_city, hq_country, employee_size (one of '1-10', '11-50', '51-200', '201-500', '501-1000', '1001-5000', '5000+'), primary_product, pricing_model (one of 'free', 'freemium', 'subscription', 'usage-based', 'one-time', 'enterprise-sales', 'unknown'), and contact_email (only if a public contact email is listed on the site). Pass a short natural-language prompt alongside the schema telling Firecrawl to fill each field from the homepage, about page, and pricing page if present, and to leave a field null rather than guess.
Step 2: on success, call Airtable's Update Record operation on the same record ID and write each extracted field into its matching Airtable column. Map company_name to Company Name, one_line_description to Description, industry to Industry, hq_city to HQ City, hq_country to HQ Country, employee_size to Employee Size, primary_product to Primary Product, pricing_model to Pricing Model, contact_email to Contact Email. Also set the Status column to 'Enriched'. Leave columns blank where Firecrawl returned null rather than writing the string 'null'.
Step 3: on failure (Firecrawl returns success: false, a non-2xx status, or throws), call Airtable's Update Record operation on the same record and set Status to 'Failed' and write a short error message (one sentence, truncated to 200 characters) into a 'Enrichment Notes' column so the user can see what went wrong without leaving Airtable. Do not write any of the extracted-data columns in the failure case.
Constraints: this is a deterministic pipeline, not an agent. The schema is fixed and every step is a known node. The workflow should be idempotent at the row level (Status='Enriched' acts as the dedupe key) and resilient to single-row failures (one bad URL must not block enrichment for the next new row). Do not loop over the whole table on each run; rely on the new_record trigger to scope work to one record at a time.
What does this prompt do?
- Watches your Airtable Prospects table for any new row that includes a website URL
- Visits the company site and pulls out a clean profile: name, one-line description, industry, headquarters city and country, employee size, primary product, pricing model, and a public contact email if one is listed
- Writes every field back to the same row and stamps a Status column as Enriched or Failed, so the table always reflects what is done and what needs a second look
- Skips rows that are already Enriched so you do not pay to extract the same company twice
What do I need to use this?
- An Airtable base with a Prospects table that has a website URL column and a Status column
- A Firecrawl account for the website extraction
- Empty Airtable columns ready to receive the extracted fields (company name, description, industry, HQ city, HQ country, employee size, primary product, pricing model, contact email)
How can I customize it?
- Swap the eight default fields for ones your team cares about, like founded year, funding stage, target market, or a tech stack keyword
- Point the workflow at a different Airtable table or rename the Status column to match the one your team already uses
- Change which Status values count as skip so archived, do-not-contact, or already-enriched rows are left alone
FAQs
What happens if a new row does not have a website URL?
Will this re-enrich a row I edit later?
What if Firecrawl cannot read the site?
Can I extract different fields than the eight defaults?
Does this work with Airtable Free?
Related templates
Decide who stays on your creator roster after every campaign, with each creator's real numbers on screen and every call recorded where the team can see it.
See who is due, build a week of dinners on demand, swap anything you do not like, then send the recipe and grocery links yourself.
See every customer photo that tags your brand, ask for permission in one click, and repost only once a yes is on the record.
See every scan next to the details pulled out of it, correct anything wrong, and let only verified numbers reach your ledger sheet.
Search creators for free, shortlist the best with your team, and spend an audit credit only when you decide someone is worth a closer look.
Open one board each morning to see which of your facilities, suppliers and shipping lanes are sitting near trouble in the news right now.
Stop hand-researching every new prospect.
Connect Airtable and Firecrawl once, and Geni fills in a fresh company profile for every new row.