Every hour
Research companies from a sheet into Airtable
Companies you add to a sheet are looked up and saved in Airtable with industry, size and a short summary.
- Runs
- Every hour
- Apps
- Airtable, Google Sheets
- AI
- Yes, uses the built-in AI allowance
- Access
- Sheets edit; Airtable write
Send this to your assistant
Create a ClickRuntime automation: every hour, take new companies from my 'Prospects' sheet, look at their website, work out industry, size and main competitors, and create a record in my Airtable CRM. Mark each row done.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A two-person sales team collects prospect names wherever they find them: a conference list, a LinkedIn post, a referral. The quickest place to drop them is a shared sheet. Before anyone can call, someone has to open each website, work out what the company does and how big it is, and copy that into the CRM. That research step is where the list stalls.
Letting the automation read each company's homepage and fill in the basics means the sheet stays a quick inbox, and by the time a rep opens Airtable the record already says what the company does and why it might care.
What you get out of it
The sheet stays quick to use
Anyone can paste a company name and website into a row. Nobody has to learn the CRM to add a prospect.
Records arrive with context
Each Airtable record has an industry, a size estimate, likely competitors and a one-line summary taken from the company's own site.
Rows are handled once
Each row is marked done in the sheet after its record is created, so a company is never researched twice.
Research time goes to calls
Reps start from a filled-in record instead of a blank one, and spend their time on outreach.
How it works
What happens, step by step
Every hour, ClickRuntime reads your Prospects sheet and looks for rows not yet marked done.
For each new company it opens the website listed in the row.
AI reads the page and works out the industry, rough size, likely competitors and a one-line summary.
A record with those details is created in your Airtable CRM.
The row in the sheet is marked done, so it is never researched again.
Before it runs live
- Connect Airtable
- Connect your Google Sheets account and pick the spreadsheets it may use
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Airtable and Google Sheets steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, report_fetched
BASE_ID = "appXXXXXXXXXXXXXX"
SHEET_ID = "1AbCdEfGhIjKlMnOpQrStUvWxYz"
SCHEMA = {"type": "object", "properties": {"industry": {"type": "string"}, "size": {"type": "string"},
"competitors": {"type": "string"}, "summary": {"type": "string"}}, "required": ["industry", "size", "summary"]}
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")),
cache_discovery=False).spreadsheets().values()
rows = values.get(spreadsheetId=SHEET_ID, range="Prospects!A2:C").execute().get("values", [])
new = [(i + 2, r) for i, r in enumerate(rows) if len(r) >= 2 and (len(r) < 3 or not r[2])][:10]
report_fetched(len(new))
if not new:
return {"created": 0}
headers = {"Authorization": f"Bearer {credentials.connection('airtable', 'work')}"}
for row_num, (name, site, *_) in new:
try:
page = http.get(site if site.startswith("http") else f"https://{site}").text[:6000]
except Exception:
page = ""
info = ai.generate(f"Company: {name}\nWebsite text:\n{page}", json_schema=SCHEMA, max_output_tokens=250,
system="Describe this company: industry, rough employee count, 2-3 likely competitors, one-line summary.").json
http.post(f"https://api.airtable.com/v0/{BASE_ID}/Companies", headers=headers, json={"typecast": True,
"records": [{"fields": {"Name": name, "Website": site, "Industry": info["industry"], "Size": info["size"],
"Competitors": info.get("competitors", ""), "Summary": info["summary"]}}]}).raise_for_status()
values.update(spreadsheetId=SHEET_ID, range=f"Prospects!C{row_num}", valueInputOption="RAW",
body={"values": [["Done"]]}).execute()
return {"created": len(new)}FAQ
Common questions
Where does the information come from?
How accurate is the company size?
What does the sheet need to contain?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Import leads from a sheet into your Airtable CRM
New leads pasted into a sheet are added to Airtable as companies, without duplicates, and marked imported.
See how it worksCheck purchase requests against your budget sheet
New purchase requests in Airtable are checked against the department budget in your sheet and approved, flagged or rejected.
See how it worksScore job listings against your CV into Airtable
New job listings in your sheet are scored against your CV each day, and the good matches land in Airtable with a tailored summary.
See how it worksKeep exploring
Set up “Research companies from a sheet into Airtable” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.