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.
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?
What kinds of pages does this work on?
What happens if a page can't be read?
Can I use this for things other than product pages?
Will it overwrite rows I already filled in by hand?
Stop copy-pasting product details into Airtable.
Connect Airtable and TinyFish once, drop in a URL, and Geni fills in the row for you.