AutomationFlowsSocial Media › Log Multi-platform Ad Spend to Airtable From Meta, Google, Tiktok, and Taboola

Log Multi-platform Ad Spend to Airtable From Meta, Google, Tiktok, and Taboola

ByRup Sarmah @iamrup on n8n.io

This workflow runs hourly to collect campaign spend, clicks, and impressions from Meta (Facebook), Google Ads, TikTok Ads, and Taboola, then upserts the metrics into Airtable and creates a time-stamped snapshot record for Meta campaigns. Runs every 60 minutes on a schedule.…

Cron / scheduled trigger★★★★★ complexity32 nodesHTTP RequestAirtable
Social Media Trigger: Cron / scheduled Nodes: 32 Complexity: ★★★★★ Added:

This workflow corresponds to n8n.io template #16792 — we link there as the canonical source.

This workflow follows the Airtable → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Multi-Platform Ad Spend to Airtable (Meta, Google, TikTok, Taboola)",
  "tags": [],
  "nodes": [
    {
      "id": "668e82ff-e898-41c6-a09c-26023d0edeb1",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        -944
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## Multi-Platform Ad Spend to Airtable (Meta, Google, TikTok, Taboola)\n\n### How it works\n\nThis scheduled workflow collects daily ad spend data across Meta/Facebook, Taboola, Google Ads, and TikTok, then normalizes and writes campaign-level results into Airtable. It first builds the reporting date, gathers Facebook campaign references and Airtable records, loops through Facebook campaigns to fetch spend, and conditionally updates or creates Airtable rows. In parallel from the campaign loop, it also retrieves spend from Taboola, Google, and TikTok, filters the combined results, and batch-writes those records to Airtable.\n\n### Setup steps\n\n- Configure the Schedule Trigger with the desired reporting cadence and timezone.\n- Add valid Meta/Facebook Graph API access tokens and replace the placeholder ad account IDs in all Facebook HTTP Request nodes.\n- Connect Airtable credentials and configure the base, table, and field mappings used by the Airtable nodes.\n- Set Taboola Backstage API credentials for token generation and ad data retrieval.\n- Configure Google Ads API authentication, developer token, customer ID, and query/body parameters.\n- Configure TikTok Business API credentials, advertiser ID, and date/account parameters.\n- Review the custom Code nodes to confirm date formatting, campaign extraction, and spend normalization match the Airtable schema.\n\n### Customization\n\nAdjust the account lists, date window, filters, and Airtable field mappings to add more ad accounts, change attribution dates, or store additional metrics such as clicks, impressions, CPC, and conversions."
      },
      "typeVersion": 1
    },
    {
      "id": "81cb2281-339f-48af-9af1-420a7237360a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -528
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 320,
        "content": "## Schedule and date setup\n\nStarts the workflow on a schedule and formats the target reporting date for downstream ad platform requests."
      },
      "typeVersion": 1
    },
    {
      "id": "5ea8c49a-4cda-4b16-9454-cd0e5259f8b6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -512,
        -496
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 304,
        "content": "## Fetch Facebook campaigns\n\nQueries multiple Meta/Facebook ad accounts in sequence to collect the campaign lists needed for spend lookups."
      },
      "typeVersion": 1
    },
    {
      "id": "c1bf6fd8-c613-44d5-930a-d2815b18deba",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -496
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 304,
        "content": "## Prepare Facebook loop\n\nReads existing Airtable records, extracts Facebook campaign identifiers, and starts the batch loop that drives per-campaign processing."
      },
      "typeVersion": 1
    },
    {
      "id": "a5b881fd-51f9-4cd5-819b-41cae5f71fbd",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        -608
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 400,
        "content": "## Fetch Facebook spend\n\nFor each Facebook campaign, fetches spend data from the Graph API, compiles the ad metrics, and checks whether the result should be written or skipped."
      },
      "typeVersion": 1
    },
    {
      "id": "96585540-7ceb-4ec6-b288-df0f4d418e2c",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        -496
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 528,
        "content": "## Update Facebook Airtable\n\nPerforms Airtable operations for Facebook spend results and uses conditional logic to either continue looping or create/update the needed record."
      },
      "typeVersion": 1
    },
    {
      "id": "d63925ea-b341-4a1c-a0ff-d21cf933673c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        -944
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 304,
        "content": "## Collect other ad spend\n\nAuthenticates with Taboola, then retrieves Taboola, Google Ads, and TikTok ad spend data in the upper API-fetching branch."
      },
      "typeVersion": 1
    },
    {
      "id": "3b1eb720-5937-478f-b1f8-5f8f7a967f6b",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2016,
        -848
      ],
      "parameters": {
        "color": 7,
        "width": 528,
        "height": 320,
        "content": "## Normalize and filter spend\n\nTransforms the Google, Taboola, and TikTok responses into campaign records and filters out items that should not be written."
      },
      "typeVersion": 1
    },
    {
      "id": "e8729a12-d238-4df7-862c-8fb58c7b45d1",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2576,
        -800
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 384,
        "content": "## Batch write other platforms\n\nLoops through the filtered non-Facebook platform records and writes each batch or item into Airtable."
      },
      "typeVersion": 1
    },
    {
      "id": "4882a313-3ea4-46ce-aafa-f3deb65c3eb5",
      "name": "Format Date for Campaigns",
      "type": "n8n-nodes-base.code",
      "position": [
        -688,
        -368
      ],
      "parameters": {
        "jsCode": "const dateOnly = new Date(($now))\n  .toISOString()\n  .split(\"T\")[0];\n\nconst now = new Date();\nconst mm = String(now.getMonth() + 1).padStart(2, '0');  // getMonth() is 0-based\nconst dd = String(now.getDate()).padStart(2, '0');\nconst yy = String(now.getFullYear()).slice(-2); \n\nconst nowDateOnly = new Date($now).toISOString().split(\"T\")[0];\nconst dateforsheet = `${mm}/${dd}/${yy}`;\n\n// NEW: Generate PST-adjusted date for API use\nconst pstOffsetHours = -7; // Use -8 if not daylight savings\nconst pstNow = new Date(new Date($now).getTime() + pstOffsetHours * 60 * 60 * 1000);\nconst dateforapiPST = pstNow.toISOString().split(\"T\")[0];\n\n// New code to get yesterday's date in PST\nconst yesterdayPST = new Date(pstNow);\nyesterdayPST.setDate(pstNow.getDate() - 1);\nconst dateforapiPST_Yesterday = yesterdayPST.toISOString().split(\"T\")[0];\n\n\nreturn [\n  {\n    json: {\n      dateforfb: nowDateOnly,\n      dateforsheet: dateforsheet,\n      dateforapiPST: dateforapiPST,\n      dateforapiPST_Yesterday: dateforapiPST_Yesterday // <- New PST-adjusted date\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "f7d1df7c-575c-4879-a389-46e8856a1a6b",
      "name": "Fetch FB Spend Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1088,
        -448
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v22.0/{{ $json.id }}/insights?fields=campaign_id,spend,impressions,clicks&time_range={\"since\":\"{{ $('Format Date for Campaigns').first().json.dateforfb }}\",\"until\":\"{{ $('Format Date for Campaigns').first().json.dateforfb }}\"}&access_token=YOUR_META_ACCESS_TOKEN&limit=500",
        "options": {
          "batching": {
            "batch": {
              "batchSize": 10
            }
          }
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "dde43812-e73c-4f63-9d1e-e7c0fa325dee",
      "name": "Compile Ad Spend Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1312,
        -448
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "/***********************************\n * Function Node (Send All Campaigns)\n ***********************************/\n\n// 1) Campaign info from \u201cLoop Over Items\u201d (this iteration).\nconst loopData       = $('Loop Over FB Campaigns Data').item.json;\nconst campaignId     = loopData.id || \"\";\nconst campaignName   = loopData.name || \"\";\nconst campaignStatus = loopData.status || \"\";\nconst adAccount      = loopData.ad_account || \"\";\n\n// 2) Retrieve all spend data.\nconst spendItems = $items(\"Get Spend Data\");\n\nlet spendAmount = \"0\";\nlet impressions = \"0\";\nlet clicks = \"0\";\n\n// 3) Find spend, impressions, and clicks for this campaign.\nfor (const spendItem of spendItems) {\n  if (Array.isArray(spendItem.json.data) && spendItem.json.data.length > 0) {\n    const record = spendItem.json.data[0];\n    if (record.campaign_id === campaignId) {\n      spendAmount = record.spend || \"0\";\n      impressions = record.impressions || \"0\";\n      clicks = record.clicks || \"0\";\n      break;\n    }\n  }\n}\n\n// 4) Only return the campaign if spend is non-zero\nif (parseFloat(spendAmount) > 0) {\n  return {\n      campaign_id: campaignId,\n      campaign_name: campaignName,\n      campaign_status: campaignStatus,\n      ad_account: adAccount,\n      spend_amount: spendAmount,\n      impressions: impressions,\n      clicks: clicks,\n      source:\"FACEBOOK\"\n  };\n}\n\n// 5) Otherwise, return nothing (skip this campaign)\nreturn null;\n"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "cfe8e319-2154-4af4-9033-d22d50864886",
      "name": "Fetch Airtable Campaign Records",
      "type": "n8n-nodes-base.airtable",
      "position": [
        432,
        -368
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_BASE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
          "cachedResultName": "Ad Reporting"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_TABLE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
          "cachedResultName": "Daily Ad Spend"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "={Date} = '{{ $('Format Date for Campaigns').first().json.dateforsheet }}'"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "590e0d84-36ba-49b1-be2c-0e31d270f874",
      "name": "Prepare Airtable Data",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1744,
        -368
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_BASE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
          "cachedResultName": "Ad Reporting"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_TABLE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "id": "={{ $('Loop Over FB Campaigns Data').item.json.record }}",
            "Date": "={{ $('Format Date for Campaigns').first().json.dateforsheet }}",
            "Spend": "={{ $json.spend_amount }}",
            "Clicks": "={{ $json.clicks }}",
            "Source": "={{ $json.source }}",
            "Ad Account": "={{ $json.ad_account }}",
            "Campaign ID": "={{ $json.campaign_id }}",
            "Impressions": "={{ $json.impressions }}",
            "Total Leads": "=",
            "Campaign Name": "={{ $json.campaign_name }}",
            "Qualified Leads": "=",
            "Pause / Activate Campaign": "={{ $json.campaign_status}}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Campaign - Date Key",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Campaign - Date Key",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment Split",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment Split",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign Type",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Campaign Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Leads",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Leads",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Confirmed",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Total Confirmed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Form QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Total Form QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QL to Confirmed %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "QL to Confirmed %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead to Confirmed %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Lead to Confirmed %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment A QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment A QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment B QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment B QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Spend",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Spend",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Spend in last hr",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Spend in last hr",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPCTC",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPCTC",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL 49-62",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL 49-62",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL 40-48",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL 40-48",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Update Data",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Update Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pause / Activate Campaign",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "ACTIVE",
                  "value": "ACTIVE"
                },
                {
                  "name": "PAUSED",
                  "value": "PAUSED"
                },
                {
                  "name": "TODO",
                  "value": "TODO"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pause / Activate Campaign",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Updated at ",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Updated at ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "BRAND Lead Data",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "BRAND Lead Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pacing (Across Campaigns)",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pacing (Across Campaigns)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Impressions",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Impressions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Daily Target",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Daily Target",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Max Spend (Last Hour)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Max Spend (Last Hour)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Min Spend (Last Hour)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Min Spend (Last Hour)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Daly REport Connect",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Daly REport Connect",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Week",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Week",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Click to Lead %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Link Click to Lead %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ad Account",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Ad Account",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Leads",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Total Leads",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Region",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Region",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Region QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Region QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Qualified Leads",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Qualified Leads",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Day",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Day",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Daily Snapshot",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Daily Snapshot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "if last working day",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "if last working day",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "BH/AH",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "BH/AH",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Formfill CPQCTC",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Formfill CPQCTC",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QL %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "QL %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "520584f8-dd69-44e2-9ea5-81401c16b78f",
      "name": "Fetch FB Campaigns Account 2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -240,
        -368
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v15.0/act_YOUR_AD_ACCOUNT_2/campaigns?effective_status=%5B%22ACTIVE%22%2C%22PAUSED%22%5D&fields=name%2Cid%2Cstatus&access_token=YOUR_TOKEN_HERE&limit=10000",
        "options": {}
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "f28d3f1a-5abf-4c6e-b45a-0a69a200d9e8",
      "name": "Fetch FB Campaigns Account 1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -464,
        -368
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v15.0/act_YOUR_AD_ACCOUNT_1/campaigns?effective_status=%5B%22ACTIVE%22%2C%22PAUSED%22%5D&fields=name%2Cid%2Cstatus&access_token=YOUR_TOKEN_HERE&limit=10000",
        "options": {}
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "5877795a-94e5-40d5-9959-ad27ab73e143",
      "name": "Fetch FB Campaigns Account 3",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -16,
        -368
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v15.0/act_YOUR_AD_ACCOUNT_3/campaigns?effective_status=%5B%22ACTIVE%22%2C%22PAUSED%22%5D&fields=name%2Cid%2Cstatus&access_token=YOUR_TOKEN_HERE&limit=10000",
        "options": {}
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "d53c75fc-95c6-4ef9-90ca-9d045432bec3",
      "name": "Store to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2240,
        -144
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_BASE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
          "cachedResultName": "Ad Reporting"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_TABLE_ID_2",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID_2",
          "cachedResultName": "Daily Snapshot"
        },
        "columns": {
          "value": {
            "Slot": "={{ \n  $('Compile Ad Spend Data').item.json.campaign_id \n}}-{{ \n  new Date(Date.now())\n    .toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false }) \n}}\n",
            "spend": "={{ $('Compile Ad Spend Data').item.json.spend_amount }}",
            "clicks": "={{ $('Compile Ad Spend Data').item.json.clicks }}",
            "impression": "={{ $('Compile Ad Spend Data').item.json.impressions }}",
            "Campaign link": "=[\"{{ $('Loop Over FB Campaigns Data').item.json.record }}\"]",
            "Campaign name": "={{ $('Prepare Airtable Data').item.json.fields['Campaign Name'] }}"
          },
          "schema": [
            {
              "id": "Slot",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Slot",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "slot time - tz adjusted",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "slot time - tz adjusted",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "spend",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "spend",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "impression",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "impression",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign link",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign ID (from Campaign link)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Campaign ID (from Campaign link)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pacing Start",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pacing Start",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pacing End",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pacing End",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Data created",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Data created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Start date",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Start date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "updated",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "updated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Slot time raw",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Slot time raw",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last 1 hr link",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Last 1 hr link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Is in last hour",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Is in last hour",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "hr of the day",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "hr of the day",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "906aba2a-39d5-436f-9130-191bfc367fc4",
      "name": "Fetch Taboola Ads Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        -816
      ],
      "parameters": {
        "url": "=https://backstage.taboola.com/backstage/api/1.0/YOUR_TABOOLA_ACCOUNT/reports/realtime-campaign-summary/dimensions/by_campaign?start_date={{ $('Format Date for Campaigns').first().json.dateforfb }}T00:00:00&end_date={{ $('Format Date for Campaigns').first().json.dateforfb }}T23:59:59",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "Authorization",
              "value": "=Bearer  {{ $('Retrieve Taboola Access Token').item.json.access_token }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "580c7c22-4d5b-4737-9faa-9c64ed9854fa",
      "name": "Fetch Google Ads Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1520,
        -816
      ],
      "parameters": {
        "url": "https://googleads.googleapis.com/v24/customers/YOUR_GOOGLE_CUSTOMER_ID/googleAds:search",
        "body": "{   \"query\": \"SELECT campaign.id, campaign.name, metrics.cost_micros, metrics.clicks, segments.date FROM campaign WHERE segments.date DURING TODAY\" }",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "rawContentType": "application/JSON",
        "headerParameters": {
          "parameters": [
            {
              "name": "developer-token",
              "value": "YOUR_GOOGLE_DEVELOPER_TOKEN"
            },
            {
              "name": "login-customer-id",
              "value": "YOUR_GOOGLE_LOGIN_CUSTOMER_ID"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "googleAdsOAuth2Api"
      },
      "credentials": {
        "googleAdsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1d9739fd-008d-44ee-8c78-6e7f7808a2fd",
      "name": "Extract FB Campaign Information",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        -368
      ],
      "parameters": {
        "jsCode": "/***********************************\n * Function Node (Run Once for All Items)\n ***********************************/\n\n// 1) Define keywords to match in campaign.name\nconst campaignKeywords = [\n  \"BRAND:LIVE\",\n  \"PROSPECT:LIVE\",\n  \"PRD:BRAND\",\n  \"your-offer-slug\",\n  \"PROSPECT:OOO\",\n  \"PROSPECT:AH\",\n  \"PROSPECT:Paused\",\n  \"PROSPECT:paused\",\n  \"PROSPECT:LTB\",\n  \"PROSPECT:24-7\",\n  \"BRAND\"\n];\n\n// 2) Grab all Facebook campaigns from each node and tag them with a source.\nconst fbCampaigns1 = ($('Fetch FB Campaigns Account 1').first().json.data || [])\n  .map(campaign => ({ ...campaign, source: 'fb1' }));\nconst fbCampaigns2 = ($('Fetch FB Campaigns Account 2').first().json.data || [])\n  .map(campaign => ({ ...campaign, source: 'fb2' }));\nconst fbCampaigns3 = ($('Fetch FB Campaigns Account 3').first().json.data || [])\n  .map(campaign => ({ ...campaign, source: 'fb3' }));\nconst fbCampaigns4 = ($('Fetch FB Campaigns Account 4').first().json.data || [])\n  .map(campaign => ({ ...campaign, source: 'fb4' }));\n\n// Combine all campaigns into one array.\nconst fbCampaigns = [...fbCampaigns1, ...fbCampaigns2, ...fbCampaigns3, ...fbCampaigns4];\n\n// 3) Filter campaigns to only those whose name contains any of the keywords.\nconst filteredCampaigns = fbCampaigns.filter(campaign => \n  campaignKeywords.some(keyword => campaign.name.includes(keyword))\n);\n\n// 4) Load Airtable records from this node\u2019s input.\n//    Each record should have a field \"Campaign ID\" and an Airtable record id.\nconst airtableRecords = $input.all().map(item => item.json);\n\n// 5) For each matching FB campaign, find the corresponding Airtable record by comparing\n//    the Airtable \"Campaign ID\" to the Facebook campaign's id.\n//    Also, assign an extra value based on the source: fb1 -> \"xyz\", fb2 -> \"abc\", fb3 -> \"123\".\nconst results = filteredCampaigns.map(campaign => {\n  const matchingRecord = airtableRecords.find(record => record[\"Campaign ID\"] === campaign.id);\n  const recordId = matchingRecord ? matchingRecord.id : \"\";\n  \n  // Determine the extra value based on the campaign source.\n  let account = \"\";\n  if (campaign.source === 'fb1') {\n    account = 'YOUR_AD_ACCOUNT_1';\n  } else if (campaign.source === 'fb2') {\n    account = 'YOUR_AD_ACCOUNT_2';\n  } else if (campaign.source === 'fb3') {\n    account = 'YOUR_AD_ACCOUNT_3';\n  }else if (campaign.source === 'fb4') {\n    account = 'YOUR_AD_ACCOUNT_4';\n  }\n  \n  return {\n      id: campaign.id,\n      name: campaign.name,\n      status: campaign.status,\n      record: recordId,  // Airtable record id if found; otherwise, an empty string.\n      ad_account: account\n  };\n});\n\n// 6) Return the array of matching campaigns with the Airtable record id and extra value added.\nreturn results;\n"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "f1f2e2cb-9216-48dd-80ed-625785988c22",
      "name": "Process Airtable Records",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2848,
        -576
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_BASE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID",
          "cachedResultName": "Ad Reporting"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_AIRTABLE_TABLE_ID",
          "cachedResultUrl": "https://airtable.com/YOUR_AIRTABLE_BASE_ID/YOUR_AIRTABLE_TABLE_ID",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "id": "={{ $json.record }}",
            "Date": "={{ $('Format Date for Campaigns').first().json.dateforsheet }}",
            "Spend": "={{ $json.spend_amount }}",
            "Clicks": "={{ $json.clicks }}",
            "Source": "={{ $json.source }}",
            "Ad Account": "={{ $json.ad_account }}",
            "Campaign ID": "={{ $json.campaign_id.toString() }}",
            "Impressions": "=",
            "Total Leads": "=",
            "Campaign Name": "={{ $json.campaign_name }}",
            "Qualified Leads": "=",
            "Pause / Activate Campaign": "={{ $json.campaign_status}}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Campaign - Date Key",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Campaign - Date Key",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Campaign ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment Split",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment Split",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Campaign Type",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Campaign Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Leads",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Leads",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Confirmed",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Total Confirmed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Form QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Total Form QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QL to Confirmed %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "QL to Confirmed %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead to Confirmed %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Lead to Confirmed %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment A QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment A QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Segment B QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Segment B QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Spend",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Spend",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Spend in last hr",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Spend in last hr",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPCTC",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPCTC",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL 49-62",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL 49-62",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CPQL 40-48",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "CPQL 40-48",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Update Data",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Update Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pause / Activate Campaign",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "ACTIVE",
                  "value": "ACTIVE"
                },
                {
                  "name": "PAUSED",
                  "value": "PAUSED"
                },
                {
                  "name": "TODO",
                  "value": "TODO"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pause / Activate Campaign",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Updated at ",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Updated at ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "BRAND Lead Data",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "BRAND Lead Data",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Pacing (Across Campaigns)",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Pacing (Across Campaigns)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Impressions",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Impressions",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Clicks",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Clicks",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Daily Target",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Daily Target",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Max Spend (Last Hour)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Max Spend (Last Hour)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Min Spend (Last Hour)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Min Spend (Last Hour)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Daly REport Connect",
              "type": "array",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Daly REport Connect",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Week",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Week",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link Click to Lead %",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Link Click to Lead %",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ad Account",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Ad Account",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Leads",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Total Leads",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Region",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Region",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Region QL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "Region QL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Qualified Leads",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": fals

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow runs hourly to collect campaign spend, clicks, and impressions from Meta (Facebook), Google Ads, TikTok Ads, and Taboola, then upserts the metrics into Airtable and creates a time-stamped snapshot record for Meta campaigns. Runs every 60 minutes on a schedule.…

Source: https://n8n.io/workflows/16792/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

Gemini - Video Analysis (NEW). Uses httpRequest, stickyNote, sort, limit. Scheduled trigger; 29 nodes.

HTTP Request, Airtable, Execute Workflow Trigger
Social Media

Convert your customer satisfaction into high-converting social media content with this fully automated social proof pipeline. This workflow scans your database for top-tier reviews, generates a brande

N8N Nodes Uploadtourl, Airtable, HTTP Request +1
Social Media

A guide to understand, operate, and extend the workflow.

Airtable, HTTP Request
Social Media

Instagram Follow-up Workflow. Uses airtable, httpRequest. Scheduled trigger; 8 nodes.

Airtable, HTTP Request
Social Media

This n8n template acts as your automated social media data analyst. Instead of manually checking your analytics across different dashboards every week, this workflow scrapes your latest stats, calcula

HTTP Request, YouTube, Airtable +3