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.
Additional information
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
Frequently asked questions
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?
Stop hand-researching every new prospect.
Connect Airtable and Firecrawl once, and Geni fills in a fresh company profile for every new row.