Google Sheets + OpenAI: faster Instagram vetting
Instagram vetting usually starts simple. Then you’re juggling tabs, copying bios into notes, and trying to remember why “looks legit” felt true last Tuesday. That’s where Sheets OpenAI vetting automation earns its keep.
Influencer marketers feel it first. A community manager doing weekly partner checks gets hit too. And if you run a small agency, this is the kind of repetitive review work that quietly eats your margin.
This workflow watches your Google Sheet for new or updated Instagram handles, scrapes the public profile data, runs a two-pass OpenAI analysis, then writes clean, standardized insights back into the same row. You’ll see how it works, what you need, and where people trip up.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + OpenAI: faster Instagram vetting
flowchart LR
subgraph sg0["Gatilho Linha Alterada Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtop.svg' width='40' height='40' /></div><br/>Iniciar Sessão Airtop"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtop.svg' width='40' height='40' /></div><br/>Abrir Janela do Perfil"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtop.svg' width='40' height='40' /></div><br/>Extrair Dados do Perfil"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtop.svg' width='40' height='40' /></div><br/>Encerrar Sessão Airtop"]
n4@{ icon: "mdi:robot", form: "rounded", label: "Parser Autoajuste A", pos: "b", h: 48 }
n5@{ icon: "mdi:brain", form: "rounded", label: "Modelo Chat IA A", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Parser Estruturado A", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Parser Autoajuste B", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "Modelo Chat IA B", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Parser Estruturado B", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Formatar Saída do Perfil", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Analisar Perfil com IA", pos: "b", h: 48 }
n12@{ icon: "mdi:play-circle", form: "rounded", label: "Gatilho Linha Alterada", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Processar Lotes", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Atualizar Registro Planilha", pos: "b", h: 48 }
n15@{ icon: "mdi:cog", form: "rounded", label: "Retorno de Loop", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filtrar Ativação Planilha", pos: "b", h: 48 }
n15 --> n13
n13 --> n0
n3 --> n10
n2 --> n3
n0 --> n1
n5 -.-> n4
n5 -.-> n11
n8 -.-> n7
n8 -.-> n10
n1 --> n2
n12 --> n16
n10 --> n11
n6 -.-> n4
n4 -.-> n11
n9 -.-> n7
n7 -.-> n10
n11 --> n14
n14 --> n15
n16 --> n13
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n12 trigger
class n4,n6,n7,n9,n10,n11 ai
class n5,n8 aiModel
class n16 decision
class n14 database
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3 customIcon
The Problem: Instagram reviews don’t scale in a spreadsheet
If you review Instagram profiles manually, the process looks “quick” until you do it 30 times in a row. You open the profile, scan the bio, guess the niche, check recent posts, then paste bits into a Sheet (or worse, into a running doc). Small inconsistencies creep in fast. One reviewer writes a full paragraph, another writes “ok,” and a week later nobody trusts the notes because they’re stale, subjective, or missing key fields.
It adds up fast. Here’s where it breaks down once volume shows up.
- Every profile review turns into 10+ minutes of tab-switching and copy-paste, which means a list of 50 handles can swallow most of a morning.
- Notes aren’t standardized, so filtering for “brand-safe,” “high engagement,” or “UGC fit” becomes guesswork instead of an actual workflow.
- Public profile data changes constantly, so yesterday’s “good candidate” can become “inactive” and no one notices until the campaign slips.
- Manual reviews invite human error, especially when multiple teammates touch the same sheet and overwrite each other’s fields.
The Solution: Google Sheets → Airtop scraping → OpenAI insights → clean fields back in Sheets
This workflow turns your Google Sheet into a living queue for Instagram vetting. When a row is added or updated, n8n checks if that profile still needs analysis. If it does, the automation spins up an Airtop session, opens a fresh window to the Instagram profile, and scrapes the public data you’d normally eyeball (bio, visible metrics, and other public signals). Then OpenAI steps in twice: first to clean and structure the raw scrape into consistent fields, and second to generate deeper, decision-ready insights like likely niche, content style, brand safety notes, and recommended next steps. Finally, everything gets written back into the same row in Google Sheets so your team can sort, filter, and decide without hunting through screenshots or messy notes.
The workflow starts with a Google Sheets “row changed” trigger. Airtop handles the controlled browsing and scraping, then the AI agents refine and analyze the output. Google Sheets is the final destination, so your sheet stays the system of record.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team vets 40 Instagram profiles a week. Manually, assume about 10 minutes per profile to open the page, scan, and write notes, which is roughly 6–7 hours of attention-heavy work. With this workflow, you add handles to Google Sheets (maybe 5 minutes total for the whole batch), then wait for the scrape + AI processing to finish in the background. You still review the final notes, but you’re scanning standardized fields, so the “decision step” is closer to an hour than an entire morning.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for the handle list and results table.
- Airtop to scrape public Instagram profile data.
- OpenAI API key (get it from the OpenAI API dashboard).
Skill level: Intermediate. You’ll connect accounts, paste keys, and map sheet columns to the workflow’s fields.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A Google Sheets row changes. When a new Instagram handle is added (or an existing one is edited), the workflow triggers and checks a “needs analysis” condition so it doesn’t reprocess rows unnecessarily.
Items are processed in batches. If multiple rows change, n8n loops through them in a controlled way, which keeps the scraping and AI calls from piling up at once.
Airtop opens Instagram and scrapes public data. The workflow starts an Airtop session, opens a fresh window to the target profile, extracts the relevant public signals, then closes the session so you’re not leaving browser sessions hanging around.
OpenAI cleans, structures, then analyzes. First, the raw scrape is parsed into clean fields (think “data you can sort”). Then a second AI agent produces the judgement layer: niche, risks, opportunities, and what you should do next.
You can easily modify the “needs analysis” rule to re-check profiles weekly, or change the analysis prompts to match your brand safety policy and campaign goals. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
Start the workflow when a row is updated in your spreadsheet.
- Add and configure Gatilho Linha Alterada.
- Set Event to
rowUpdate. - Select the Document ID and Sheet Name for your Instagram profile sheet (e.g.,
[TEMPLATE] - Instagram Profilesandgid=0). - Credential Required: Connect your googleSheetsTriggerOAuth2Api credentials.
⚠️ Common Pitfall: If the trigger sheet does not match the sheet used later in Atualizar Registro Planilha, updates won’t map correctly.
Step 2: Connect Google Sheets
Define how the workflow filters eligible rows and processes them in batches.
- Configure Filtrar Ativação Planilha to only pass rows where Ativar Automação is true and Analisado is empty, using the expressions
{{ $json['Ativar Automação'] }}and{{ $json.Analisado }}. - Connect Filtrar Ativação Planilha to Processar Lotes to enable batch processing.
- Keep the loop by connecting Atualizar Registro Planilha to Retorno de Loop, and Retorno de Loop back to Processar Lotes.
Step 3: Configure Airtop Session and Extraction
Open the Instagram profile in Airtop, extract profile data, and close the session cleanly.
- In Iniciar Sessão Airtop, set Profile Name to
luis-testes-n8nand enable Save Profile On Termination. - Credential Required: Connect your airtopApi credentials in Iniciar Sessão Airtop.
- In Abrir Janela do Perfil, set URL to
=https://www.instagram.com/{{ $('Processar Lotes').item.json['@ - Instagram'] }}/and Session ID to={{ $('Iniciar Sessão Airtop').item.json.sessionId }}. - Credential Required: Connect your airtopApi credentials in Abrir Janela do Perfil, Extrair Dados do Perfil, and Encerrar Sessão Airtop.
- In Extrair Dados do Perfil, keep the Prompt as provided to extract name, bio, followers, reels, stories, and first five posts.
- Ensure Encerrar Sessão Airtop is connected after extraction to close the session with Operation set to
terminate.
@ - Instagram is empty, Abrir Janela do Perfil will open an invalid URL.Step 4: Set Up AI Formatting and Analysis
Use AI agents and output parsers to structure the profile data and generate an approval decision.
- In Formatar Saída do Perfil, set Text to
=Segue as informações do perfil para você tratar: {{ $('Extrair Dados do Perfil').item.json.data.modelResponse }}and keep Has Output Parser enabled. - Connect Modelo Chat IA B as the language model for Formatar Saída do Perfil. Credential Required: Connect your openAiApi credentials in Modelo Chat IA B.
- Ensure Parser Estruturado B feeds into Parser Autoajuste B, which then connects as the output parser to Formatar Saída do Perfil. Add credentials to Modelo Chat IA B (not the parser nodes).
- In Analisar Perfil com IA, use the provided analysis prompt and keep Has Output Parser enabled. The prompt references structured fields like
{{ $json.output['Nome Perfil'] }}and{{ $json.output['Post 1'] }}. - Connect Modelo Chat IA A as the language model for Analisar Perfil com IA. Credential Required: Connect your openAiApi credentials in Modelo Chat IA A.
- Ensure Parser Estruturado A feeds into Parser Autoajuste A, which then connects as the output parser to Analisar Perfil com IA. Add credentials to Modelo Chat IA A (not the parser nodes).
Step 5: Configure Spreadsheet Updates
Write the AI analysis and profile data back into your Google Sheet.
- Open Atualizar Registro Planilha and set Operation to
update. - Set Matching Columns to
@ - Instagramso updates match the correct row. - Map columns using the existing expressions, for example:
- Set Bio to
{{ $('Formatar Saída do Perfil').item.json.output.descricao }}and Informações to{{ $('Formatar Saída do Perfil').item.json.output['infos do perfil'] }}. - Set Análise IA to
{{ $json.output.analise_completa }}, Aprovação IA to{{ $json.output.filtro }}, and Nota de Confiança to{{ $json.output.nota }}. - Set Analisado to
Analisado em {{ $now.format('dd/MM/yyyy T') }}and Link do Perfil to=https://www.instagram.com/{{ $('Gatilho Linha Alterada').item.json['@ - Instagram'] }}/. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Atualizar Registro Planilha.
Aprovação IA, Nota de Confiança), the update will silently fail or write to the wrong fields.Step 6: Test & Activate Your Workflow
Validate that the workflow processes a sample row and writes analysis results back to the sheet.
- Manually update a row in the sheet to trigger Gatilho Linha Alterada, ensuring Ativar Automação is true and Analisado is empty.
- Run the workflow once and confirm the execution path follows: Gatilho Linha Alterada → Filtrar Ativação Planilha → Processar Lotes → Iniciar Sessão Airtop → Abrir Janela do Perfil → Extrair Dados do Perfil → Encerrar Sessão Airtop → Formatar Saída do Perfil → Analisar Perfil com IA → Atualizar Registro Planilha → Retorno de Loop.
- Check that the target row is updated with Bio, Informações, Aprovação IA, Nota de Confiança, and Análise IA.
- Once verified, toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n “Credentials” screen and confirm the connected Google account still has edit access to the sheet.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About an hour if your Sheet and API keys are ready.
No. You’ll mostly connect accounts and map your Google Sheets columns to the workflow fields.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs (often a few cents per profile) plus any Airtop usage beyond free credits.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll change the trigger logic. Many teams add a scheduled trigger (weekly) and reuse the same “needs analysis” check by comparing a “last analyzed” date in Google Sheets. You can also tweak the “Analisar Perfil com IA” prompt to match your niche (fitness creators vs. SaaS founders feels very different). If you want cleaner output, adjust the structured parsers so the sheet columns stay consistent.
Usually it’s expired Airtop credentials or a missing permission on the Airtop project you’re using. Re-authenticate Airtop in n8n, then confirm your Airtop credits are available and the session can be created. If it fails only on some profiles, it can be a page load issue; increase the batch pacing so Airtop has time to open the window and capture the content. Finally, check if Instagram is rate limiting or showing extra prompts, because that can break scraping until the session is restarted.
On most setups, dozens per day is realistic, and self-hosting can push higher as long as your server and API limits keep up.
It depends on what you call “better.” For scraping + multi-step AI parsing, n8n is usually easier to control because you can batch items, branch with conditions, and keep the logic in one place without paying per tiny step. Zapier and Make are great for simpler flows, but they can get awkward when you need a browser-style scraping tool (Airtop) plus two AI passes and structured parsing. Honestly, the deciding factor is volume: if you’ll vet lots of profiles, n8n tends to be more cost-stable. Talk to an automation expert if you want help choosing.
Once this is running, your spreadsheet stops being a dumping ground and becomes a real review system. The workflow handles the repetitive parts, so you can spend your time making the call.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.