API Docs Get API key
Hosting Guide

Where to Host n8n for Lead Enrichment Workflows

Docker on a VPS, Railway, or a managed n8n platform: what each option costs you in setup and maintenance, and how to connect LinkFinder AI once the instance is live.

n8n is the open-source workflow engine most lead-gen teams end up on once Zapier and Make bills start scaling with lead volume. It is fair-code licensed, self-hostable, and treats an HTTP request like a first-class node, which is exactly what you want when every lead needs three or four enrichment calls before it reaches the CRM.

The question we get most from LinkFinder AI users is not "how do I build the workflow" but "where should I run n8n?" This guide covers the three options we see in practice, what each one costs you in setup and maintenance, and how to connect LinkFinder AI once the instance is running.

1

Why self-host n8n for enrichment pipelines

n8n Cloud is a fine product, but enrichment workflows have a specific shape that pushes people toward self-hosting:

  • Execution volume. A single inbound lead can trigger a LinkedIn URL lookup, an email finder, a phone lookup and a company enrichment call. Cloud plans meter executions, and lead volume is spiky. Self-hosted n8n has no per-execution cost.
  • Data residency. Contact data flows through the instance. Running it on infrastructure you control makes GDPR and DPA conversations much shorter.
  • Long-running batches. Enriching a 5,000-row CSV overnight is a normal job for a self-hosted worker. It is an awkward fit for a metered plan.
  • Custom nodes. Community nodes, including the LinkFinder AI n8n node, install cleanly on a self-hosted instance.

The trade-off is operations. Somebody has to keep the container up, patch it, back up the database and rotate the encryption key if it leaks. The three options below sit at different points on that spectrum.

2

Option 1: Docker on a VPS

The classic route. You rent a small VPS, install Docker, and run n8n next to a Postgres container. A minimal docker-compose.yml:

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data

  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: change-me
      N8N_ENCRYPTION_KEY: generate-a-long-random-string
      N8N_HOST: n8n.yourdomain.com
      WEBHOOK_URL: https://n8n.yourdomain.com/
      GENERIC_TIMEZONE: Europe/Paris
      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: 168
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  postgres_data:
  n8n_data:

Put a reverse proxy with TLS in front of it (Caddy is the least effort) and you are done.

Good for: teams with someone who already runs servers, or workloads with strict data residency requirements.

Watch out for: you own backups, upgrades and uptime. A $6/month VPS is cheap until the disk fills up with execution logs at 3 a.m. Set EXECUTIONS_DATA_PRUNE from day one.
3

Option 2: Railway

Railway is the "I want a container, not a server" option. It is what we run our own enrichment workflows on, and the whole setup is two files.

FROM n8nio/n8n:latest
{
  "$schema": "https://railway.app/railway.schema.json",
  "build": { "builder": "DOCKERFILE" },
  "deploy": {
    "startCommand": "n8n start",
    "restartPolicyType": "ON_FAILURE"
  }
}

Push that to a GitHub repo, point a Railway service at it, and n8n boots. Three things to add in the Railway dashboard before you trust it with real data:

  • A volume mounted at /home/node/.n8n. Without it, every redeploy wipes your workflows and credentials.
  • A Postgres service from Railway's template, with the DB_* variables from the compose example above pointed at it. SQLite works for a demo and will hurt you in production.
  • N8N_ENCRYPTION_KEY and WEBHOOK_URL as environment variables. Set the webhook URL to the public Railway domain so inbound webhooks (form submissions, CRM triggers) resolve correctly.

Good for: solo builders and small teams who want Git-based deploys and predictable usage-based pricing without touching a shell.

Watch out for: Railway is general-purpose infrastructure. It knows nothing about n8n, so backups, version pinning and scaling workers are still on you. Pin the image tag once you are stable; latest will eventually ship a breaking change on a Tuesday.
4

Option 3: FlowEngine, managed n8n built for AI agents

If you want n8n hosted by people who only host n8n, look at FlowEngine. It is a managed n8n platform: you get a running instance in about thirty seconds, automatic backups, auto-deploy from GitHub for custom Docker images, and an official n8n node plus an MCP server so you can generate workflows from a text description instead of dragging nodes around.

What makes it interesting for enrichment work specifically is where the platform is heading. FlowEngine's upcoming v2 positions it as a Railway built for AI agents, and the feature list maps closely to the pain points of running lead pipelines at scale:

  • Shared vaults for API keys and credentials across instances, so your LinkFinder AI key, CRM token and email provider credentials live in one place instead of being pasted into every workflow.
  • Memory sandboxes for agents that need state between runs, which is what a "re-enrich this account when something changes" agent actually needs.
  • Built-in rotated IPs, useful when your workflows call rate-limited or geo-sensitive endpoints.
  • An AI app builder that can, for example, connect a database to n8n without you writing the glue.
  • A fleet agent that monitors instances and scales them up when a batch job saturates a worker.

Good for: teams who want the control of self-hosted n8n without hiring for it, and anyone planning to run agentic workflows rather than simple linear automations.

Watch out for: it is a managed service, so you are trusting a vendor with uptime and data handling. Read their enterprise and on-premise options if your compliance team needs them.
5

Quick comparison

Docker on a VPSRailwayFlowEngine
Time to first workflow1 to 2 hours15 minutesUnder a minute
Who handles upgradesYouYouFlowEngine
BackupsYouYou (volume snapshots)Built in
Custom nodesYesYesYes
Git-based deployManualYesYes
Agent-focused featuresNoNoYes (v2)
Best forOps-capable teamsSolo buildersTeams shipping agents
6

Connecting LinkFinder AI to your instance

Once n8n is running, the enrichment step is the same on all three hosts. LinkFinder AI is a single REST endpoint, POST https://api.linkfinderai.com, and a type field in the body selects the lookup. An HTTP Request node is enough; if you would rather have Resource and Operation dropdowns, install the LinkFinder AI community node from the n8n community nodes settings page.

A minimal enrichment flow is a trigger followed by three HTTP Request nodes and a write-back:

1. Find the LinkedIn URL from a name and company (1 credit)

Store your API key as an n8n Header Auth credential rather than in the node itself, so it is encrypted at rest with your N8N_ENCRYPTION_KEY.

Method:  POST
URL:     https://api.linkfinderai.com
Auth:    Header Auth credential
         Name:  Authorization
         Value: Bearer YOUR_API_KEY
Body:    JSON
{
  "type": "lead_full_name_to_linkedin_url",
  "input_data": "{{ $json.full_name }} {{ $json.company }}"
}

2. Find the email from the LinkedIn URL (10 credits)

{
  "type": "linkedin_profile_to_email",
  "input_data": "{{ $json.linkedin_url }}"
}

3. Enrich the company (1 credit)

{
  "type": "company_name_to_employee_count",
  "input_data": "{{ $json.company }}"
}

4. Write back

Update the CRM record, append to a Google Sheet, or hand the lead to your outreach tool. The full list of type values and their credit costs is in the API documentation.

Batch, don't hammer. For CSV jobs, use the Split In Batches node with a short Wait between batches. Your credits go further and you avoid retry storms.
Handle "not found" explicitly. Route empty results to a separate branch instead of letting them fall through as blanks in the CRM. A lead with no email is still a lead; it just needs a different sequence.

Ready-to-import templates for n8n, Make and Zapier are on the integrations page, and a code-first version of the same flow is in How to enrich leads with an API.

7

Which one should you pick?

  • You have an ops person and strict data rules: Docker on a VPS.
  • You are one person shipping fast and comfortable in a dashboard: Railway, with a volume and Postgres from day one.
  • You want managed n8n and plan to run agents, not just automations: FlowEngine.

Whichever you choose, the enrichment layer is the same three HTTP calls. Get the instance stable first, then connect LinkFinder AI and let the workflow run.

Plug LinkFinder AI into your n8n instance

Free credits to start, an API on every plan, and one endpoint for LinkedIn URLs, emails, phones and company data.

Get your API key

No credit card required • API on every plan • Cancel anytime