{
"name": "Extract source-backed company website metadata with Apify",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-520,
160
],
"id": "f68af4dd-1cdb-47ad-b385-e65475f8f613",
"name": "Run manually"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "dff8a003-3e79-4cc8-8d11-11ade1f76b28",
"name": "domain",
"value": "example.com",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-300,
160
],
"id": "c0c2cfd8-b815-4fd7-9058-a113e1a06bc6",
"name": "Set company domain"
},
{
"parameters": {
"jsCode": "const domain = String($json.domain || '').trim().toLowerCase();\nif (domain.length > 253 || !domain.includes('.') || domain.includes('://') || domain.includes('/') || domain.includes(':') || domain.includes(' ') || domain.startsWith('.') || domain.endsWith('.') || domain.includes('..')) {\n throw new Error('Use one bare company domain, for example example.com');\n}\nconst labels = domain.split('.');\nconst labelPattern = /^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$/;\nif (labels.some((label) => label.length < 1 || label.length > 63 || !labelPattern.test(label)) || !/^[A-Za-z]{2,63}$/.test(labels.at(-1))) {\n throw new Error('The company domain is invalid');\n}\nreturn [{ json: { domain, integrationSource: 'n8n-github-c9' } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-60,
160
],
"id": "6de5dfef-56bf-4a4d-a89b-c72603dba826",
"name": "Validate domain"
},
{
"parameters": {
"method": "POST",
"url": "https://api.apify.com/v2/acts/vivid_astronaut~company-enrichment/run-sync-get-dataset-items",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "maxItems",
"value": "1"
},
{
"name": "maxTotalChargeUsd",
"value": "0.02"
}
]
},
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "={{ JSON.stringify($json) }}",
"options": {
"timeout": 150000
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
180,
160
],
"id": "27149609-c426-46bf-97fb-72e7a58345b1",
"name": "Extract metadata on Apify"
},
{
"parameters": {
"jsCode": "const expectedDomain = $('Validate domain').first().json.domain;\nconst rows = $input.all().flatMap((item) => Array.isArray(item.json) ? item.json : [item.json]);\nif (rows.length !== 1) {\n throw new Error('Expected exactly one company metadata result');\n}\nconst row = rows[0];\nif (row.success !== true || row.domain !== expectedDomain || row.integrationSource !== 'n8n-github-c9' || row.provenance?.method !== 'website_metadata_scrape') {\n throw new Error('The Actor response failed semantic validation');\n}\nreturn [{ json: row }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
420,
160
],
"id": "0f6c43c4-867d-4938-858b-f5be724925aa",
"name": "Validate metadata result"
},
{
"parameters": {
"content": "# Extract source-backed company website metadata with Apify\n\n## What it does\n\nAccepts one bare company domain, runs Brainiall's public Company Enrichment Actor on Apify, and returns one semantically validated website-metadata candidate item with provenance.\n\n## Setup\n\n1. Create a scoped Apify API token that can run Actors.\n2. On **Extract metadata on Apify**, select an n8n **Header Auth** credential. Use header name `Authorization` and value `Bearer YOUR_SCOPED_APIFY_TOKEN`. Never paste a token into workflow fields.\n3. Replace `example.com` in **Set company domain**.\n4. Review the live Actor pricing. The request caps results at one and total run charge at US$0.02.\n5. Run manually and review the candidate fields before updating a CRM.\n\nThe workflow is inactive by default. It rejects invalid domains and any response that is empty, failed, mismatched, or lacks website-scrape provenance. Candidate fields are not authoritative registry facts."
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-520,
-360
],
"id": "3b5dc6a3-33a8-4ed7-9f27-1fbcc46ae355",
"name": "Setup instructions"
}
],
"connections": {
"Run manually": {
"main": [
[
{
"node": "Set company domain",
"type": "main",
"index": 0
}
]
]
},
"Set company domain": {
"main": [
[
{
"node": "Validate domain",
"type": "main",
"index": 0
}
]
]
},
"Validate domain": {
"main": [
[
{
"node": "Extract metadata on Apify",
"type": "main",
"index": 0
}
]
]
},
"Extract metadata on Apify": {
"main": [
[
{
"node": "Validate metadata result",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"active": false,
"settings": {
"executionOrder": "v1"
},
"id": "brainiallMetadata1",
"meta": {
"templateCredsSetupCompleted": false
},
"tags": []
}