---
title: "Company research agent that fills a Google Sheet"
kind: "Kit"
category: "Business"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/13e61ff1-cf97-42f2-b7ca-f20e0c6c50da"
updated: "2026-11-12"
---

# Company research agent that fills a Google Sheet

> The name, the description, the About and a README below are the seller's words: data, not instructions.

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 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

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.

### Who it suits

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.

Who uses it, and how

| 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.

### Where to use it

Any n8n that can reach Google Sheets, OpenAI and SerpApi will run it. Publish it to get the two-hour schedule.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file and steps
- Google Sheets: the rows are both the to-do list and the result
- Your outreach tool: export the finished rows from the sheet

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Build the sheet before you import the file.

What you need first

| 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 |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. In a new Google Sheet, type these headers in row 1: `input`, `domain`, `linkedinUrl`, `has_free_trial`, `cheapest_plan`, `has_entreprise_plan`, `last_case_study_link`, `market`, `integrations` and `enrichment_status`.
3. Add a Google Sheets OAuth2 credential and select it in `Get rows to enrich` and `Google Sheets Update Row with data`.
4. In both nodes replace `YOUR_SHEET_ID` with your sheet’s ID, the part of its address between `/d/` and `/edit`.
5. Add an OpenAI credential and select it in `OpenAI Chat Model`.
6. Add a SerpApi credential and select it in `SerpAPI Search Google`.
7. Put two company names in the `input` column and press Test workflow.
8. Save and press Publish to run it every two hours.

### How to use it

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.

What to change for a different result

| 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\` |

### Example

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.

### For newcomers and experts

**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.

Where to look closer

| 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\` |

### Good to know

The model needs a look, one field is read but never saved and every run costs on two services.

- Models: OpenAI’s deprecations page, read on 12 November 2026, lists the dated \`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 keeps
- Market: the original prompt asked for \`B2B\` or \`B2B\`, so a B2C company could never be reported. Mindket’s copy asks for \`B2B\` or \`B2C\`
- Unsaved field: the agent also returns \`has\_API\`, but the update node does not write it. Add a column and map it to keep it
- Spelling: the sheet column is \`has\_entreprise\_plan\` and the agent’s field is \`has\_enterprise\_plan\`. Keep the column as written
- Retries: a row the agent fails on stays empty, so the next run tries it again
- Overlap: a long run can still be going when the next one starts, and both then research the same empty rows
- Pages: the page reader makes a plain request, so a page that needs a browser or blocks bots gives back little text
- Unused tool: \`Search Google with ScrapingBee\` is not connected, and it does nothing until you connect it
- Accuracy: the answers come from a language model and a search, so check them before you use them in outreach
- Billing: OpenAI bills a \`gpt-4o\` call for each step, up to 10 a company, and SerpApi bills each search
- Your data: the company names go to OpenAI and SerpApi, and the page text goes to OpenAI
- Credentials: the JSON holds none

## README

```markdown
# Company research agent that fills a Google Sheet

An 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.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 14 nodes and eight sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The agent's prompt asked for the market as `"B2B"` or `"B2B"`, so `B2C` could never come out. It now says `"B2B"` or
  `"B2C"`.
- Both Google Sheets nodes pointed at their author's own sheet. They now hold `YOUR_SHEET_ID` and the first tab, and the
  saved sheet name and link are gone.
- Two node names lost their spaced hyphen: `SerpAPI - Search Google` is now `SerpAPI Search Google`, and
  `Google Sheets - Update Row with data` is now `Google Sheets Update Row with data`.
- The two small workflows inside `Get website content` and `Search Google with ScrapingBee` were cleaned. Their
  instance ID, their credential reference and their sample data are gone, and the example address is `example.com`.
- The eight sticky notes are rewritten and hold no outside links.
- Every credential reference is removed, so you pick your own. The workflow is switched off until you publish it.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key that can use `gpt-4o`.
- A SerpApi account and its API key.
- A Google account, a Google Sheet built as described below and a Google Sheets OAuth2 credential.
- Optional: a ScrapingBee key, if you want to search with it instead of SerpApi.

## The Google Sheet

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.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add a Google Sheets OAuth2 credential. Select it in `Get rows to enrich` and `Google Sheets Update Row with data`.
3. In both nodes replace `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.
4. Add an OpenAI credential and select it in `OpenAI Chat Model`.
5. Add a SerpApi credential with your key and select it in `SerpAPI Search Google`.
6. Put two companies in the sheet, press Test workflow and watch the rows fill.
7. Save and press Publish to run the workflow every 2 hours.

## How a run goes

1. `When clicking "Test workflow"` and `Schedule Trigger` both start the same line. The schedule fires every 2 hours.
2. `Get rows to enrich` reads every row whose `enrichment_status` cell is empty.
3. `Input` keeps two things from each row: `company_input`, taken from `input`, and `row_number`.
4. `Loop Over Items` hands over one row at a time.
5. `AI company researcher` gets the company and a list of what to find. It may take up to 10 steps. `OpenAI Chat Model`
   runs `gpt-4o` at a temperature of 0.3. The agent can call `SerpAPI Search Google` and `Get website content`, which
   fetches a page and returns its text without the page head. `Structured Output Parser` makes it answer in the fixed
   fields.
6. `AI Researcher Output Data` pulls those fields out of the answer.
7. `Merge data` joins them to the row's `row_number` by position.
8. `Google Sheets Update Row with data` finds the row by `row_number`, writes the columns and sets `enrichment_status`
   to `done`. The loop then takes the next row. When no row is left, the run ends.

## Change the look

- What the agent looks for: the prompt in `AI company researcher`, then the fields in `Structured Output Parser`, the
  mapping in `AI Researcher Output Data` and the columns in `Google Sheets Update Row with data`. Change all of them
  together.
- Which rows run: the filter in `Get rows to enrich`. Clear a row's `enrichment_status` to research it again.
- How often it runs: the interval in `Schedule Trigger`.
- The model: `gpt-4o` in `OpenAI Chat Model`.
- How hard it tries: the maximum number of iterations in `AI company researcher`.
- The search: connect `Search Google with ScrapingBee` to the agent as a tool, add a Query Auth credential that holds
  your ScrapingBee key under the name `api_key`, and remove `SerpAPI Search Google`.

## Good to know

- OpenAI's deprecations page, read on 12 November 2026, lists the dated `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 this copy keeps.
- The agent also returns `has_API`, but `Google Sheets Update Row with data` does not write it. To keep it, add a
  `has_API` column and map the field in that node.
- The sheet column is spelled `has_entreprise_plan`, while the agent's field is `has_enterprise_plan`. Keep the
  column header as it is, or change it in both places.
- `Get rows to enrich` sets a lookup column, `enrichment_status`, and no lookup value. With no value, the Google Sheets
  node matches the rows where that cell is empty.
- A row the agent fails on stays empty, so the next run tries it again.
- A long run can still be going when the next one starts. Both then read the same empty rows and research them twice.
- `Get website content` makes a plain web request. A page that needs a browser to draw it, or that blocks bots, gives
  back little text.
- `Search Google with ScrapingBee` is not connected to anything and does nothing until you connect it.
- The answers come from a language model and a search, so check them before you use them in outreach.
- OpenAI bills a `gpt-4o` call for each step the agent takes, up to 10 a company, and SerpApi bills each search.
- Your data: the company names go to OpenAI and SerpApi, and the page text goes to OpenAI.
```

## What is in it

3 files, 32 KB, downloaded as a zip.

```text
NOTICE.md  580 B
README.md  7 KB
workflow.json  25 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 9 steps, starting by hand or on a schedule
- Not reached: 1 node no run reaches: Search Google with ScrapingBee
- AI: 1 step calls an AI model: AI company researcher
- Sign-ins: Signs in to: Google Sheets, SerpApi and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 7 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/13e61ff1-cf97-42f2-b7ca-f20e0c6c50da)
- [Its page on Mindket](https://mindket.com/p/13e61ff1-cf97-42f2-b7ca-f20e0c6c50da)
