Daily UpLead company enrichment for your Google Sheet

Every weekday at 7am, fill in company name, headcount, revenue, industry, and LinkedIn for every pending domain in your Google Sheet using UpLead.

Deterministic Code
UpLeadGoogle SheetsSalesOperationsLead EnrichmentData Sync

Build me a code workflow that auto-enriches a Google Sheet of company domains with UpLead every weekday morning. Trigger: cron, every weekday (Mon to Fri) at 7am in my local timezone.

Inputs I want to configure on the workflow: the Google Sheets spreadsheet ID, the worksheet/tab name, the A1 range that covers my data including a header row, the column letter that holds the domain, the column letters where each enriched field should be written (company name, employee count, revenue range, industry, country, founded year, LinkedIn URL), the column letter for the status cell, and a per-run cap on how many rows to process (default 200).

Step 1. Use Google Sheets Get Values to read the configured range. Treat the first row as headers. For each data row, decide if it is pending: it has a domain, the enrichment columns are empty, and the status cell is not already set to enriched or not-found. Collect pending rows up to the per-run cap. If there are no pending rows, end the run cleanly.

Step 2. For each pending row, call UpLead Search Company by domain to look up that company. From the response, extract company name, employee count, revenue range, industry, country, founded year, and LinkedIn URL. Handle these cases: a successful match (set status to "enriched"), no company found (set status to "not-found" and leave the enrichment fields blank), and an API error (set status to a short error reason like "error: 401 unauthorized" or "error: timeout").

Step 3. Respect UpLead's 500 requests per minute rate limit. If a call returns HTTP 429, pause for the number of seconds in the Retry-After header before retrying. Add a small delay between calls so a big batch does not spike.

Step 4. Write the results back to the sheet with Google Sheets Batch Update Values so all updates for a row land together in one request and we minimize Sheets API calls. Use USER_ENTERED so the LinkedIn URL becomes a clickable link. Update only the columns mapped in the inputs plus the status cell. Do not touch any other columns.

Step 5. At the end of the run, log a short summary: how many rows were processed, how many were enriched, how many came back not-found, how many errored, and how many UpLead credits remain (the credit balance is returned on each UpLead response).

Important behaviors: idempotent and safe to re-run (already-enriched and not-found rows are always skipped). Deterministic, no LLM reasoning in the loop. If the sheet is empty or the configured columns do not exist, fail loudly with a clear error instead of writing to the wrong cells.

Additional information

What does this prompt do?
  • Reads your Google Sheet of company domains every weekday morning and finds the rows that still need enrichment.
  • Looks each domain up in UpLead and writes back the company name, employee count, revenue range, industry, country, founded year, and LinkedIn URL.
  • Stamps a status column with enriched, not-found, or the error reason so you can see at a glance what happened on each row.
  • Caps the run at a configurable number of rows so a big paste does not burn through your UpLead credit budget in one morning.
What do I need to use this?
  • A Google account with edit access to the sheet you want enriched.
  • An UpLead account on a plan that includes API access, plus an API key from your UpLead profile.
  • A sheet with at least a domain column and empty columns reserved for the enriched fields and a status cell.
How can I customize it?
  • Change the schedule, for example from weekday mornings to once a week, or run it twice a day if you paste new domains often.
  • Adjust the per-run cap up or down to match how many UpLead credits you want to spend per morning.
  • Pick which firmographic fields land in the sheet and in what column order, or add and remove fields like founded year or LinkedIn URL.

Frequently asked questions

Will it re-enrich rows I have already filled in?
No. Before each run it skips any row where the enrichment columns are already populated, and it also skips rows previously marked as not-found so you do not waste credits looking up the same dead domains every day.
What happens if UpLead cannot find a domain?
The status cell on that row is set to not-found. The next run will skip it, so your credits go to fresh domains instead.
How does it avoid burning through my UpLead credits?
Each run is capped at a number of rows you choose, with a default of 200. If you paste in a thousand new domains, it works through them across several mornings instead of spending all your credits at once.
What fields get filled in for each company?
Company name, employee count, revenue range, industry, country, founded year, and LinkedIn URL. You can drop any of these or rearrange the column order to match your sheet.
Can I run this on demand instead of on a schedule?
Yes. The schedule is just the default trigger. You can also run the workflow by hand any time you paste in a new batch of domains and want them enriched immediately.

Open your sheet to a fully enriched account list every morning.

Connect Google Sheets and UpLead once, and Geni quietly fills in the firmographics every weekday before you sit down.