Technical Case Study · Reusable Template

n8n Account Enrichment & ICP Scoring

A seven-node workflow that reads new company domains from Airtable, enriches firmographic data through Apollo, assigns an AI-assisted ICP grade, and writes the result back by Airtable record ID.

Status boundary: configuration-reviewed template. Credentials, field mappings, quotas, and a manual dry-run are still required before activation. This page does not claim measured production throughput or contact-email enrichment.
Workflow Schedule Airtable List Domain Filter Apollo Organization Gemini Score Format Airtable Update
7workflow nodes in the downloadable template
0API keys, personal records, or production IDs included
4activation gates: IDs, credentials, mappings, dry-run
Problem & Scope

Automate the repetitive parts, preserve review

The template is deliberately narrow: enrich an organization and score account fit. Apollo’s organization endpoint is not represented as a source of verified decision-maker emails; people search and contact enrichment belong in a separate, consent-aware workflow.

Input

Company domain

Airtable remains the operator-facing source. Only records with Status = New and a non-empty domain proceed.

Processing

Firmographics + score

Apollo returns organization data. Gemini evaluates that data against an explicit ICP rubric and returns structured JSON.

Output

Update by record ID

The code node restores the originating Airtable record ID before fields are written back to the same record.

Architecture

One source, two APIs, one guarded write

The visual groups seven n8n nodes into five responsibilities. All examples are synthetic; no client or prospect data appears on this page.

Data Integrity

The record ID must survive every node

HTTP nodes replace the current item payload. A common failure is to return only the API response and silently lose the source record identifier. The template reads the original Airtable node explicitly and fails closed if the ID is missing.

const sourceRecord = $('Airtable — List New Accounts').item.json;
const recordId = sourceRecord.id;

if (!recordId) {
  throw new Error('Airtable record ID is missing');
}

return {
  recordId,
  companyName,
  industry,
  headcount,
  icpScore,
  scoreReason,
  status: 'Enriched'
};
AI fallback: malformed output becomes REVIEW, not an automatic low-quality score. This keeps parse failures visible to an operator.
Field Contract

Minimal Airtable schema

Field names in an imported n8n workflow must match the destination base exactly. The template uses this small contract.

FieldRoleWritten byValidation
Company DomainLookup keyOperator/importRequired and normalized without www
Company Name / Industry / HeadcountFirmographicsApollo responseMay be empty when no match is found
ICP ScoreA, B, C, or REVIEWGemini + parserConstrained to the approved values
Score ReasonShort rationaleGeminiHuman-readable and reviewed in dry-run
StatusProcessing guardn8n updatePrevents the next poll from reprocessing the record
Activation Checklist

Dry-run before switching on

The downloadable JSON contains placeholders and is intentionally inactive. These are the minimum checks before production.

Technical Verification

Official references used for correction

The uploaded draft was corrected to match the documented organization endpoint and header-based Gemini authentication available at the time of this review.

Download the reviewed template

It contains placeholder IDs and credential references only. Import it into a non-production workspace, complete the checklist, and keep it inactive until the dry-run passes.