Auto-fill Airtable product rows from any URL

Paste a product URL into your Airtable table and get the title, price, availability, image, and a short description back in the same row.

Deterministic Code
AirtableTinyFishOperationsMarketingData SyncResearch & MonitoringDocument Processing

Build a code workflow that watches an Airtable table for new rows containing a URL, scrapes the page with TinyFish, and writes the extracted product details back into the same row.

Trigger: Airtable poll trigger on the new_record event for a specific base and table. The user will choose the base and table at setup. The table has these columns: url (URL), title (single line text), price (single line text or currency), availability (single line text), image_url (URL), short_description (long text), status (single select with options like success and failed), and error_code (single line text).

Step 1: When the trigger fires, take the url field from the new record and call TinyFish Fetch URLs with that single URL. Pass a structured extraction schema asking for: title (string), price (string, including currency symbol if present), availability (string, normalized to something like in stock, out of stock, preorder, or unknown), image_url (string, absolute URL of the main product image), and short_description (string, two to three sentences max). Use markdown output and screenshots disabled to keep the call lean.

Step 2: Check the TinyFish response. The Fetch API returns per-URL failures in an errors array with codes like bot_blocked, target_unreachable, target_http_error, timeout, empty_content, or invalid_url. If the URL produced an error, call Airtable Update Record on the same record id from the trigger, setting status to failed and error_code to the TinyFish error code. Leave the other fields empty. Stop there.

Step 3: If TinyFish returned extracted data successfully, call Airtable Update Record on the same record id from the trigger. Write the extracted title, price, availability, image_url, and short_description into their matching columns, and set status to success. Use typecast true so Airtable converts values into the right cell types where needed.

Notes for the build. TinyFish authenticates with an API key sent as the X-API-Key header. Airtable record updates accept up to 10 records per request but this workflow processes one record per trigger fire. Do not retry on permanent TinyFish errors like invalid_url or invalid_api_key. The Airtable Update Record call should target the same record id returned by the trigger so we write back to the exact row that fired.

Additional information

What does this prompt do?
  • Watches a specific Airtable table for new rows where someone has dropped in a URL.
  • Reads the page behind that URL and pulls out the product title, price, availability, hero image, and a short description.
  • Writes everything back into the same Airtable row, no copy-paste, no half-filled fields.
  • If the page can't be read (bot blocked, site down, empty page), the row is marked failed with the reason so nothing gets silently skipped.
What do I need to use this?
  • An Airtable base with a table that has a URL column and empty columns for title, price, availability, image, short description, and a status field.
  • A TinyFish account with an API key for reading public web pages.
How can I customize it?
  • Change the field list. Swap price and availability for SKU, brand, ratings, or any other column you keep on your products.
  • Point it at any table. Works the same way for competitor watchlists, deal trackers, gift guides, or research backlogs.
  • Tune the error behavior. Choose whether failed rows retry on the next run, get assigned to a teammate, or just sit in a failed view for review.

Frequently asked questions

Do I have to write any code or know how scraping works?
No. You paste a URL into Airtable and the populated row comes back. The reading, parsing, and writing all happens behind the scenes.
What kinds of pages does this work on?
Public product pages and most public marketing or content pages. If a site requires a login or actively blocks automated visitors, that row will be marked failed with the reason so you can handle it yourself.
What happens if a page can't be read?
Instead of leaving a half-empty row, the status column is set to failed along with a short reason like blocked, unreachable, or empty. You can filter the table to those rows and decide what to do.
Can I use this for things other than product pages?
Yes. The same setup works for competitor pricing, real estate listings, job posts, news articles, or any structured page. You decide which columns to fill in and the workflow extracts them.
Will it overwrite rows I already filled in by hand?
No. It only runs on brand new rows where the URL was just added. Existing rows are left alone unless you explicitly re-run them.

Stop copy-pasting product details into Airtable.

Connect Airtable and TinyFish once, drop in a URL, and Geni fills in the row for you.