> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryprofound.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Campaigns

> Pull the active Search campaigns from a connected Google Ads account

The **List Campaigns node** pulls the active Search campaigns from a connected Google Ads customer account.

It's designed as an upstream lookup step: its job is to provide a campaign list that subsequent Google Ads nodes use to filter, label, and scope their data pulls before you run performance analysis.

## When to use this node

Use the List Campaigns node for tasks such as:

* **Scoping downstream nodes to specific campaigns:** get campaign IDs and names first, then pass them into [Search Terms](/integrations/google-ads/search-terms), [Keywords](/integrations/google-ads/keywords), [Landing Pages](/integrations/google-ads/landing-pages), or [Ads](/integrations/google-ads/ads) as a filter rather than pulling data across all campaigns at once
* **Labeling campaign-level performance data:** enrich downstream node outputs with campaign names so LLM-generated summaries are human-readable
* **Building campaign-aware agents at scale:** especially useful for Manager accounts (MCC) with many campaigns, where structured campaign discovery is needed before diving into metrics

## Node configuration

### Google Integration (required)

Select a previously connected Google account, or click **+ Add integration** and follow the prompts to connect one. This is a one-time setup. Once you add an integration, it's available in all future sessions until you remove it in Profound **Settings > Integrations**.

### Google Ads Account (required)

Select the Google Ads customer account from the dropdown. The picker handles both Manager accounts and sub-account selection.

### Output label

Enter a descriptive label for this step's output, for example `campaigns` or `active_campaigns`. The label becomes the variable name you reference in later nodes.

## Output

The node outputs your campaigns data in JSON format, including campaign names, dates, and statuses.

**Pass the output to:**

* [Search Terms](/integrations/google-ads/search-terms): Filter by campaign ID to get actual user queries for that campaign, with CTR, CPC, CVR, CPA, and ROAS
* [Keywords](/integrations/google-ads/keywords)**:** Scope the keyword quality score and efficiency audit to specific campaigns
* [Ads](/integrations/google-ads/ads):​ Pull only the RSA creative assets (headlines and descriptions) for a specific campaign
* [Prompt LLM](/agents/nodes/prompt-llm): Feed the campaign list for summarization, naming convention audits, or campaign structure analysis
* **Code node or** [**Conditional**](/agents/how-tos/add-conditionals) **node** to filter, sort, or slice campaigns data, or branch workflow logic based on factors such as status or presence of a campaign

## Example usage: Weekly negative keyword discovery

Set up an Agent to scan last week's search terms across all campaigns, identify wasted spend, and post actionable negative keyword recommendations to Slack. Here is the example structure:

**1. List Campaigns node**

* Select your **Google Integration** and set **Google Ads Account** to your Google Ads account
* Set **Output label** to `campaigns`

**2.** [Search Terms](/integrations/google-ads/search-terms) **node**

* Repeat the **Google Integration** and **Ads Account** from the previous step
* Set **Date Range** to Last 7 days
* Set **Campaigns**, **Ad Groups,** and **Output Fields** filters as needed
* Set **Output** label to `search_term_data`

<Tip>The data from both List Campaigns and Search Terms nodes can be too large to send directly to the Prompt LLM node. Use **Agent Assistant** to build the data preprocessing steps, such as the Code node for trimming search term data, into your Agent.</Tip>

**3.** [Prompt LLM](/agents/nodes/prompt-llm) **node**

* Enter the prompt:

  ```text expandable wrap theme={null}
  You are a paid search analyst. Review last week's Google Ads search term
  data: {{search_term_data}}.

  Campaigns context: {{campaigns}}.

  Flag terms as negative keyword candidates if they have:
  - Zero conversions and cost over $100
  - CVR below 1% and cost over $50
  - Informational or off-target intent (e.g. "free", "what is", "certification")
  - Competitor branded terms we are not intentionally targeting

  For each flagged term: name, campaign, cost, conversions, reason to negate,
  recommended match type (Exact or Phrase).

  End with: total wasted spend, top 3 negatives to add today.

  Format as a scannable Slack message with bullet points.
  ```

* Set **Output label** to `negative_keyword_report`

<Tip>Check out our [prompt best practices](/agents/how-tos/prompt-llm-best-practices) guide for the Prompt LLM node.</Tip>

**4.** [Slack](/integrations/slack/overview) **node**

* Select the Slack workspace and channel to receive updates
* Input the message text, or use the `negative_keyword_report` variable in the **Message** field

Schedule the Agent to run weekly, for example every Monday at 9 AM.

## Best practices

### Use to support other Google Ads nodes

List Campaigns is a lookup step. Its full value comes through when its output flows into [Search Terms](/integrations/google-ads/search-terms), [Keywords](/integrations/google-ads/keywords), [Landing Pages](/integrations/google-ads/landing-pages) or [Ads](/integrations/google-ads/ads) as a scoping filter.

### Use Iterations for multi-campaign Agents

To run downstream nodes for each campaign individually, wrap them in an ​[**Iteration block**](/agents/how-tos/add-iterations) that loops over each campaign ID returned by List Campaigns.

### Test with a single campaign first

On accounts with many campaigns, scope to one campaign ID in your test run to validate the pipeline before scaling.
