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

# Get Report

> Fetch Google Ads data based on specified metrics and dimensions

The **Get Report** node lets you fetch Google Ads performance data across one or more accounts using specified metrics, dimensions, and filters. This is an **AI-powered node** that can understand natural language instructions.

***

## When to Use It

Use this node to:

* Generate automated performance reports and dashboards
* Track campaign metrics and KPIs over time
* Create data-driven insights for optimization decisions
* Export data for further analysis in external tools

***

## Inputs

| Field          | Type                 | Required | Description                                     |
| -------------- | -------------------- | -------- | ----------------------------------------------- |
| **Accounts**   | Dynamic multi-select | Yes      | Select one or more Google Ads accounts to query |
| **Date Range** | Date range picker    | Yes      | Select date range for the report                |
| **Metrics**    | Multi-select         | Yes      | Select metrics to include in the report         |
| **Dimensions** | Multi-select         | No       | Select dimensions to segment your data          |
| **Filters**    | Rule-based filters   | No       | Add filters to refine your data                 |
| **Order By**   | Sort configuration   | No       | Set the order of results                        |
| **Limit**      | Number               | No       | Maximum number of rows to return                |
| **Options**    | Report options       | No       | Additional options for the report               |

### Filters

Filters allow you to refine your data by applying conditions to specific dimensions or metrics. **Multiple filters use AND logic** - all conditions must be met for a row to be included in the results.

#### Available Filter Operators

| Operator               | Description                     | Example Use Case                             |
| ---------------------- | ------------------------------- | -------------------------------------------- |
| **EQUALS**             | Exact match                     | Campaign name equals "Black Friday"          |
| **NOT\_EQUALS**        | Does not match exactly          | Status not equals "PAUSED"                   |
| **CONTAINS**           | Contains substring              | Campaign name contains "2024"                |
| **NOT\_CONTAINS**      | Does not contain substring      | Campaign name doesn't contain "test"         |
| **IN\_LIST**           | Matches any value in list       | Campaign type in \["Search", "Display"]      |
| **NOT\_IN\_LIST**      | Doesn't match any value in list | Device not in \["TABLET"]                    |
| **REGEXP\_MATCH**      | Matches regular expression      | Campaign name matches ".*(summer\|winter).*" |
| **NOT\_REGEXP\_MATCH** | Doesn't match regex             | Campaign name doesn't match "test.\*"        |
| **GREATER\_THAN**      | Numeric greater than            | Impressions > 1000                           |
| **LESS\_THAN**         | Numeric less than               | Cost \< 500                                  |
| **IS\_NULL**           | Field has no value              | Conversion value is null                     |
| **IS\_NOT\_NULL**      | Field has a value               | Conversion value is not null                 |

#### Filter Examples

**Example 1: Active campaigns with decent performance**

```
- Impressions > 100 (GREATER_THAN)
- Campaign status = "ENABLED" (EQUALS)
- Cost > 0 (GREATER_THAN)
```

**Example 2: Seasonal campaigns using regex (OR logic)**

```
- Campaign name matches ".*(summer|winter|holiday).*" (REGEXP_MATCH)
```

**Example 3: Exclude test campaigns**

```
- Campaign name does not contain "test" (NOT_CONTAINS)
- Campaign name does not contain "demo" (NOT_CONTAINS)
```

**Example 4: High-performing search campaigns**

```
- Campaign type = "SEARCH" (EQUALS)
- CTR > 2.0 (GREATER_THAN)
- Conversions > 0 (GREATER_THAN)
```

#### OR Logic with Filters

Since multiple filters use AND logic, use these approaches for OR conditions:

1. **IN\_LIST operator**: `Campaign type IN ["Search", "Display", "Shopping"]`
2. **REGEXP\_MATCH operator**: `Campaign name REGEXP_MATCH ".*(summer|winter|spring).*"`
3. **Run separate queries**: Create different workflows for different conditions

### Options Reference

These optional settings let you format the output from Google Ads before passing it to other nodes.

| Option                          | Description                                                                         |
| ------------------------------- | ----------------------------------------------------------------------------------- |
| **Pretty Column Names**         | Converts column headers to Title Case (e.g. `campaignName` becomes `Campaign Name`) |
| **Add Percent Sign to Ratios**  | Appends `%` to ratio metrics like CTR or Engagement Rate                            |
| **Display Currency Symbol**     | Adds `$` or local currency symbol to monetary metrics                               |
| **Compact Numbers**             | Converts large numbers to short format (e.g. `10K` instead of `10,000`)             |
| **Pivot Dimensions as Columns** | Transforms dimension values into separate columns for easier comparison             |

***

## Output

The node returns a structured dataset with performance metrics and dimensions. The exact format depends on your configuration and the data returned from Google Ads.

**Typical Output Structure:**

* **Data Rows**: Performance metrics and dimensions
* **Metadata**: Account information, date ranges, and query details
* **Summary Statistics**: Total records, data freshness, execution time

Can be passed to:

* AI nodes like **Analyze Data** or **Structured Output**
* Export nodes (e.g., Google Sheets)
* Email or Slides nodes

***

## Credit Cost

* **Cost per run**: 1 credit per account

***

## Example Setup

```plaintext theme={"dark"}
Scheduler (Daily 8 AM) →
Get Report →
AI Analysis →
Google Slides Report →
Slack Notification
```

**Configuration Example:**

* **Date Range**: Last 7 days
* **Metrics**: Impressions, Clicks, Cost, Conversions
* **Dimensions**: Campaign Name, Date
* **Filters**: Impressions > 0 (only active campaigns)
* **Limit**: 1000 rows

***

## FAQs

<Accordion title="What happens if I select multiple Google Ads accounts?">
  The data will be **aggregated across all selected accounts** into a single dataset.\
  If you’d like to break it out by account, add the `account_name` or `account_id` dimension to segment results per account.
</Accordion>

<Accordion title="Why am I missing conversions?">
  Conversion data might lag behind the UI due to the **conversion window**.\
  For example, with a 30-day window, conversions can change long after the click date.\
  Compare data only **after the window closes** to ensure accuracy.
</Accordion>

<Accordion title="Why is my data different from the Google Ads UI?">
  Data discrepancies can occur due to:

  * **Reporting delays**: Google Ads data can take up to 24-48 hours to finalize
  * **Attribution windows**: Different attribution models may show different results
  * **Time zones**: Ensure your date range matches the account's time zone
  * **Filters**: Check if you have different filters applied in the UI vs API
</Accordion>

<Accordion title="How to filter out inactive campaigns?">
  To exclude inactive campaigns, use filters like:

  * \`cost
  * `impressions > 0`
    This ensures you only get data for active campaigns.
</Accordion>

<Accordion title="Why is my report returning no data?">
  Common causes of empty results:

  * **Date range**: The selected period may have no activity
  * **Filters**: Your filters may be too restrictive
  * **Account status**: Campaigns may be paused or inactive
  * **Metrics compatibility**: Some metric/dimension combinations aren't supported
</Accordion>

<Accordion title="Why are some metrics showing as zero?">
  Zero values can indicate:

  * **No activity**: The campaigns genuinely had no performance for those metrics
  * **Conversion tracking**: Conversion metrics require proper tracking setup
  * **Dimension compatibility**: Some dimensions don't work with certain metrics
  * **Attribution**: Different attribution models may show different values
</Accordion>

<Accordion title="How do I combine filters with OR logic?">
  Multiple filters always use **AND logic** (all conditions must be true). For OR logic, use:

  **Option 1: IN\_LIST operator**

  ```
  Campaign type IN ["Search", "Display", "Shopping"]
  ```

  **Option 2: REGEXP\_MATCH operator**

  ```
  Campaign name REGEXP_MATCH ".*(summer|winter|holiday).*"
  ```

  **Option 3: Run separate workflows**
  Create different Get Report nodes for different conditions, then combine the data downstream.
</Accordion>

<Accordion title="What's the difference between CONTAINS and REGEXP_MATCH?">
  * **CONTAINS**: Simple substring search. `Campaign name CONTAINS "2024"` finds any campaign with "2024" anywhere in the name
  * **REGEXP\_MATCH**: Advanced pattern matching. `Campaign name REGEXP_MATCH "^2024.*"` finds campaigns that START with "2024"

  Use CONTAINS for simple text searches, REGEXP\_MATCH for complex patterns or OR conditions.
</Accordion>

<Accordion title="Why are my filters not working?">
  Common filter issues:

  * **Case sensitivity**: "Summer" ≠ "summer". Use regex with case-insensitive flag or CONTAINS
  * **Data type mismatch**: Don't use text operators on numeric fields
  * **Field availability**: Not all dimensions/metrics support all filter operators
  * **Syntax errors**: Check regex patterns for proper escaping
</Accordion>

<Accordion title="What does &#x22;Invalid enum value cannot be included in WHERE clause&#x22; mean?">
  This error happens when you use the wrong format for certain filter values. **Some fields require specific text formats in ALL CAPS**.

  **Common examples:**

  * Campaign status: Use `"ENABLED"` not `"Enabled"` or `"enabled"`
  * Campaign type: Use `"SEARCH"` not `"Search"` or `"search"`
  * Device: Use `"MOBILE"` not `"Mobile"` or `"mobile"`

  **How to find the correct format:**

  1. Add the field (like `campaign_status`) to your **Dimensions**
  2. Run the report **without any filters**
  3. Look at the results to see exactly how Google shows these values
  4. Copy those exact values into your filters

  **Example:**

  ```
  ✅ Correct: Campaign status = "ENABLED"
  ❌ Wrong: Campaign status = "Enabled"
  ❌ Wrong: Campaign status = "enabled"
  ```
</Accordion>
