AutomationFlowsMarketing & Ads › Hack Ppc Audit

Hack Ppc Audit

Hack Ppc Audit. Uses googleAds, slack. Scheduled trigger; 6 nodes.

Cron / scheduled trigger★★★★☆ complexity6 nodesGoogle AdsSlack
Marketing & Ads Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ Added:

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
{
  "nodes": [
    {
      "id": "a3f1c2d4-e5b6-4789-a012-b3c4d5e6f701",
      "name": "Every Monday 7am UTC",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        240,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 7 * * 1"
            }
          ]
        }
      }
    },
    {
      "id": "b7e2d3f5-a6c7-4890-b123-c4d5e6f70812",
      "name": "Get Campaign Performance",
      "type": "n8n-nodes-base.googleAds",
      "typeVersion": 1,
      "position": [
        460,
        300
      ],
      "parameters": {
        "resource": "campaign",
        "operation": "getAll",
        "managerCustomerId": "",
        "clientCustomerId": "",
        "additionalOptions": {
          "dateRange": "LAST_7_DAYS",
          "campaignStatus": "ENABLED"
        }
      },
      "credentials": {
        "googleAdsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "id": "c8f3e4a6-b7d8-4901-c234-d5e6f7081923",
      "name": "Calculate CTR and CPC",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        680,
        300
      ],
      "parameters": {
        "mode": "keepExisting",
        "fields": {
          "values": [
            {
              "name": "campaign_name",
              "type": "stringValue",
              "stringValue": "={{ $json.campaign?.name }}"
            },
            {
              "name": "impressions",
              "type": "numberValue",
              "numberValue": "={{ $json.metrics?.impressions ?? 0 }}"
            },
            {
              "name": "clicks",
              "type": "numberValue",
              "numberValue": "={{ $json.metrics?.interactions ?? 0 }}"
            },
            {
              "name": "cost_usd",
              "type": "numberValue",
              "numberValue": "={{ ($json.metrics?.cost_micros ?? 0) / 1000000 }}"
            },
            {
              "name": "conversions",
              "type": "numberValue",
              "numberValue": "={{ $json.metrics?.conversions ?? 0 }}"
            },
            {
              "name": "ctr_pct",
              "type": "numberValue",
              "numberValue": "={{ $json.metrics?.impressions > 0 ? Math.round(($json.metrics.interactions / $json.metrics.impressions) * 10000) / 100 : 0 }}"
            },
            {
              "name": "cpc_usd",
              "type": "numberValue",
              "numberValue": "={{ $json.metrics?.interactions > 0 ? Math.round((($json.metrics.cost_micros / 1000000) / $json.metrics.interactions) * 100) / 100 : 0 }}"
            }
          ]
        }
      }
    },
    {
      "id": "d9a4f5b7-c8e9-4012-d345-e6f708192034",
      "name": "Flag Underperforming Campaigns",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2,
      "position": [
        900,
        300
      ],
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "cond-cpc",
              "leftValue": "={{ $json.cpc_usd }}",
              "rightValue": 5,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            },
            {
              "id": "cond-ctr",
              "leftValue": "={{ $json.ctr_pct }}",
              "rightValue": 1,
              "operator": {
                "type": "number",
                "operation": "lt"
              }
            }
          ],
          "combinator": "or"
        }
      }
    },
    {
      "id": "e0b5a6c8-d9f0-4123-e456-f7081920345a",
      "name": "Build Alert Flags",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1120,
        300
      ],
      "parameters": {
        "mode": "keepExisting",
        "fields": {
          "values": [
            {
              "name": "flag_reasons",
              "type": "stringValue",
              "stringValue": "={{ ($json.cpc_usd > 5 ? 'High CPC ($' + $json.cpc_usd + ')' : '') + ($json.cpc_usd > 5 && $json.ctr_pct < 1 ? ' | ' : '') + ($json.ctr_pct < 1 ? 'Low CTR (' + $json.ctr_pct + '%)' : '') }}"
            }
          ]
        }
      }
    },
    {
      "id": "f1c6b7d9-e0a1-4234-f567-081920345b6c",
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.4,
      "position": [
        1340,
        300
      ],
      "parameters": {
        "resource": "message",
        "operation": "post",
        "select": "channel",
        "channelId": {
          "mode": "name",
          "value": "#marketing-ppc-alerts"
        },
        "text": "={{ ':rotating_light: *PPC Alert* | ' + $json.campaign_name + '\\n' + ':money_with_wings: *Spend:* $' + $json.cost_usd + '  |  :bar_chart: *CTR:* ' + $json.ctr_pct + '%  |  :dollar: *CPC:* $' + $json.cpc_usd + '\\n' + ':triangular_flag_on_post: *Flags:* ' + $json.flag_reasons }}"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Every Monday 7am UTC": {
      "main": [
        [
          {
            "node": "Get Campaign Performance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Campaign Performance": {
      "main": [
        [
          {
            "node": "Calculate CTR and CPC",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate CTR and CPC": {
      "main": [
        [
          {
            "node": "Flag Underperforming Campaigns",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Flag Underperforming Campaigns": {
      "main": [
        [
          {
            "node": "Build Alert Flags",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert Flags": {
      "main": [
        [
          {
            "node": "Post to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

Hack Ppc Audit. Uses googleAds, slack. Scheduled trigger; 6 nodes.

Source: https://github.com/alvarocubaa/n8n-workflow-builder/blob/4eff3d38299486ce819c0d6d28c7df5bf6c7236f/examples/marketing/hack_ppc_audit.json — original creator credit. Request a take-down →

More Marketing & Ads workflows → · Browse all categories →

Related workflows

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

Marketing & Ads

This workflow automatically monitors your Google Ads campaigns every day, analyzing performance with AI-powered scoring to identify scaling opportunities and catch issues before they drain your budget

Google Ads, Google Sheets, Slack +1
Marketing & Ads

This workflow monitors Meta Ads and Google Ads campaigns on a daily schedule to detect performance drops. It fetches yesterday’s campaign data, standardizes metrics, and calculates CTR and ROAS agains

Google Sheets, HTTP Request, Slack +3
Marketing & Ads

This workflow reads a list of prospect company domains from Google Sheets, enriches each company with multiple PredictLeads data sources, calculates a weighted intent score based on job openings, tech

@Predictleads/N8N Nodes Predictleads, Slack, Google Sheets
Marketing & Ads

You know the businesses that need your services, but finding them is the hard part. They have 150+ five-star reviews, customers raving about specific services, and zero way to book online. They exist,

Chain Llm, Groq Chat, @Mendable/N8N Nodes Firecrawl +2
Marketing & Ads

Stop manually digging through endless Google Ads search term reports! 📊 This workflow puts your brand campaign analysis on autopilot, acting as an AI-powered performance marketer that works for you 24

Slack, Chain Llm, Google Gemini Chat +3