anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that takes company names from a Google Sheet. An OpenAI agent searches Google and reads each website, then writes the domain, LinkedIn address, plans, market, case study and integrations back into the row.
Company research agent that fills a Google Sheet is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Schedule or manual run
It starts every 2 hours, or when you press Test workflow, and reads the rows of a Google Sheet whose enrichment_status is empty. Each row needs:
The researched facts written into the company’s row in the Google Sheet, with enrichment_status set to done
What you need before you start.
The list and the result
Supplies the rows to research and receives the facts in the same row.
NeedsGoogle Sheets OAuth2 credential and a sheet ID
Language model
Runs gpt-4o as the agent that decides what to search and read.
NeedsOpenAI API key
Google search
Gives the agent Google search results for each company.
NeedsSerpApi API key
Checked by Mindket on 13 Nov 2026
This n8n workflow researches companies from a list. You put a company name or a domain in a Google Sheet. Every two hours, or when you press a button, it picks up the rows that have no status yet. An OpenAI agent running gpt-4o searches Google and reads the company’s website. It writes its findings back into the same row. Those are the domain, the LinkedIn address, the cheapest plan, whether there is a free trial or an enterprise plan, the market, a case study link and up to five integrations. Fourteen nodes do the work, beside eight sticky notes.
Sales and marketing people who keep a list of target companies and want the first facts filled in before they write to anyone. Skip it if you need figures you can quote without a check, because the answers come from a language model and a search. Skip it too for pages that only a browser can draw, since the workflow reads plain page text.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Software sales | Sales development teams | Paste a list of target companies and get plan and market facts before the first email | A rep pastes forty company names and finds out which ones sell to businesses and offer an enterprise plan. |
| Agencies | Marketing agencies | Check a prospect’s market, tools and latest case study before a pitch | An agency lead sees that a prospect lists three integrations and has a case study from last month. |
| Partnerships | Partner managers | Find which companies already integrate with a tool | A partner manager reads the integrations column for a list of possible partners. |
| Research | Analysts | Build a small table of competitors’ pricing signals | An analyst fills the cheapest paid plan for a dozen competitors in one sitting. |
You need some n8n and three accounts: a Google Sheet with the right headers, an OpenAI key and a SerpApi key.
Any n8n that can reach Google Sheets, OpenAI and SerpApi will run it. Publish it to get the two-hour schedule.
Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Build the sheet before you import the file.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key that can use gpt-4o |
| SerpApi | An account and its API key |
| Google Sheets | A sheet with ten headers in row 1 and an OAuth2 credential |
workflow.json.input, domain, linkedinUrl, has_free_trial, cheapest_plan, has_entreprise_plan, last_case_study_link, market, integrations and enrichment_status.Get rows to enrich and Google Sheets Update Row with data.YOUR_SHEET_ID with your sheet’s ID, the part of its address between /d/ and /edit.OpenAI Chat Model.SerpAPI Search Google.input column and press Test workflow.Add a company name or a domain in the input column and leave the other cells empty. The next run fills the row and writes done in enrichment_status. To research a row again, clear that cell. A new row needs nothing else.
| To change | Where |
|---|---|
| What the agent looks for | The prompt in AI company researcher and the fields in Structured Output Parser |
| The columns | Google Sheets Update Row with data |
| The schedule | Schedule Trigger |
| The model | gpt-4o in OpenAI Chat Model |
| The search | Connect Search Google with ScrapingBee and remove SerpAPI Search Google |
A sales rep types a company’s domain in the input column of a new row.
At the next run the agent searches Google for the company, opens its pricing and customer pages and answers in the fixed fields. The row gets a LinkedIn address, a market of B2B or B2C, the cheapest paid plan and a case study link. Read the first few rows against the websites before you trust the rest.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Here the agent is the box that thinks. It can use two tools, a Google search and a page reader. A loop feeds it one row at a time. Try two rows first.
For experts. A Loop Over Items with a batch size of one feeds an agent with a structured output parser, and a merge by position carries the row number to the update.
| Node | What it does | What to know |
|---|---|---|
Get rows to enrich | Reads the rows whose enrichment_status is empty | The filter names the column and sets no value, which matches empty cells |
AI company researcher | Researches one company with up to 10 steps | It has no system message, only the prompt |
Get website content | Fetches a page and returns its text | A plain request, so scripts on the page do not run |
Merge data | Joins the row number to the agent’s answer by position | Both sides carry one item per loop |
Google Sheets Update Row with data | Updates the row matched by row_number | It does not write has_API |
The model needs a look, one field is read but never saved and every run costs on two services.
gpt-4o versions for shutdown on 14 January 2027, with gpt-6-luna as the replacement. It does not list the bare name gpt-4o, which Mindket’s copy keepsB2B or B2B, so a B2C company could never be reported. Mindket’s copy asks for B2B or B2Chas_API, but the update node does not write it. Add a column and map it to keep ithas_entreprise_plan and the agent’s field is has_enterprise_plan. Keep the column as writtenSearch Google with ScrapingBee is not connected, and it does nothing until you connect itgpt-4o call for each step, up to 10 a company, and SerpApi bills each searchAn n8n workflow that researches companies for you. Put a company name or a domain in a Google Sheet. An OpenAI agent
searches Google and reads the company's website. It writes what it finds back into the same row. That covers the domain,
the LinkedIn address, the cheapest plan, a free trial, an enterprise plan, the market, a case study link and up to five
integrations.
workflow.json: the workflow as n8n exports it, 14 nodes and eight sticky notes. It holds no credential.README.md: these notes."B2B" or "B2B", so B2C could never come out. It now says "B2B" or"B2C".YOUR_SHEET_ID and the first tab, and theSerpAPI - Search Google is now SerpAPI Search Google, andGoogle Sheets - Update Row with data is now Google Sheets Update Row with data.Get website content and Search Google with ScrapingBee were cleaned. Theirexample.com.gpt-4o.Row 1 holds these headers, spelled exactly like this:
| Column | Filled by | What it holds |
|---|---|---|
| input | You | A company name or a domain |
| domain | The agent | The domain, in the form name.tld |
| linkedinUrl | The agent | The company's LinkedIn address |
| has_free_trial | The agent | True or false, and false when the agent finds no strong evidence |
| cheapest_plan | The agent | The lowest paid plan as a number, or empty when it is not sure |
| has_entreprise_plan | The agent | Whether there is an enterprise plan |
| last_case_study_link | The agent | The first case study link it finds |
| market | The agent | B2B or B2C |
| integrations | The agent | Up to five tools the company integrates with |
| enrichment_status | The workflow | Leave it empty. The workflow writes done |
You do not make a row_number column. n8n adds it when it reads the rows. Fill input for each company and leave
the other cells empty.
workflow.json.Get rows to enrich and Google Sheets Update Row with data.YOUR_SHEET_ID with your sheet's ID, the long part of its web address between /d/ and/edit. Both read the first tab. To use another tab, change the Sheet field in both.OpenAI Chat Model.SerpAPI Search Google.When clicking "Test workflow" and Schedule Trigger both start the same line. The schedule fires every 2 hours.Get rows to enrich reads every row whose enrichment_status cell is empty.Input keeps two things from each row: company_input, taken from input, and row_number.Loop Over Items hands over one row at a time.AI company researcher gets the company and a list of what to find. It may take up to 10 steps. OpenAI Chat Modelgpt-4o at a temperature of 0.3. The agent can call SerpAPI Search Google and Get website content, whichStructured Output Parser makes it answer in the fixedAI Researcher Output Data pulls those fields out of the answer.Merge data joins them to the row's row_number by position.Google Sheets Update Row with data finds the row by row_number, writes the columns and sets enrichment_statusdone. The loop then takes the next row. When no row is left, the run ends.AI company researcher, then the fields in Structured Output Parser, theAI Researcher Output Data and the columns in Google Sheets Update Row with data. Change all of themGet rows to enrich. Clear a row's enrichment_status to research it again.Schedule Trigger.gpt-4o in OpenAI Chat Model.AI company researcher.Search Google with ScrapingBee to the agent as a tool, add a Query Auth credential that holdsapi_key, and remove SerpAPI Search Google.gpt-4o versions for shutdown on 14 Januarygpt-6-luna as the replacement. It does not list the bare name gpt-4o, which this copy keeps.has_API, but Google Sheets Update Row with data does not write it. To keep it, add ahas_API column and map the field in that node.has_entreprise_plan, while the agent's field is has_enterprise_plan. Keep theGet rows to enrich sets a lookup column, enrichment_status, and no lookup value. With no value, the Google SheetsGet website content makes a plain web request. A page that needs a browser to draw it, or that blocks bots, givesSearch Google with ScrapingBee is not connected to anything and does nothing until you connect it.gpt-4o call for each step the agent takes, up to 10 a company, and SerpApi bills each search.NOTICE.md 580 B README.md 7 KB workflow.json 25 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
perplexity-ai · Kit
Picks the best option for a decision from text and images, such as which team should handle a request, with a probability for each choice, for developers who b…
numind · Kit
Reads documents as text or images and fills a JSON template with the fields you ask for, or converts the pages to Markdown. A 4B model for teams that process s…
nace-ai · Kit
Scores yes or no, multiple choice and rating questions about a document in one pass, with a probability for every option. An 8B decision model from Nace.AI tha…