> ## 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 LinkedIn Ads data based on specified metrics and dimensions

The **Get Report** node lets you fetch LinkedIn 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
* Monitor LinkedIn advertising performance for B2B campaigns

***

## Inputs

| Field          | Type                 | Required | Description                                       |
| -------------- | -------------------- | -------- | ------------------------------------------------- |
| **Accounts**   | Dynamic multi-select | Yes      | Select one or more LinkedIn 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 "Q4 2024 Lead Gen"              |
| **NOT\_EQUALS**        | Does not match exactly          | Campaign 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 \["SPONSORED\_CONTENT", "TEXT\_AD"] |
| **NOT\_IN\_LIST**      | Doesn't match any value in list | Objective not in \["BRAND\_AWARENESS"]               |
| **REGEXP\_MATCH**      | Matches regular expression      | Campaign name matches ".*(lead\|conversion).*"       |
| **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 B2B campaigns with performance**

```
- Spend > 100 (GREATER_THAN)
- Campaign status = "ACTIVE" (EQUALS)
- Impressions > 500 (GREATER_THAN)
```

**Example 2: Lead generation campaigns using regex (OR logic)**

```
- Campaign name matches ".*(lead|conversion|demo).*" (REGEXP_MATCH)
```

**Example 3: Exclude test campaigns**

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

#### OR Logic with Filters

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

1. **IN\_LIST operator**: `Campaign type IN ["SPONSORED_CONTENT", "TEXT_AD", "DYNAMIC"]`
2. **REGEXP\_MATCH operator**: `Campaign name REGEXP_MATCH ".*(lead|B2B|enterprise).*"`
3. **Run separate queries**: Create different workflows for different conditions

### Options Reference

These optional settings let you format the output from LinkedIn 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 LinkedIn 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 9 AM) →
Get Report →
AI Analysis →
Google Slides Report →
Slack Notification
```

**Configuration Example:**

* **Date Range**: Last 30 days
* **Metrics**: Impressions, Clicks, Spend, Conversions
* **Dimensions**: Campaign Name, Date
* **Filters**: Spend > 0 (only active campaigns)
* **Report Type**: Standard Campaign Report
* **Limit**: 1000 rows

***

## FAQs

<Accordion title="What happens if I select multiple LinkedIn 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="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 ["SPONSORED_CONTENT", "TEXT_AD", "DYNAMIC"]
  ```

  **Option 2: REGEXP\_MATCH operator**

  ```
  Campaign name REGEXP_MATCH ".*(lead|B2B|enterprise).*"
  ```

  **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 "B2B"` finds any campaign with "B2B" anywhere in the name
  * **REGEXP\_MATCH**: Advanced pattern matching. `Campaign name REGEXP_MATCH "^B2B.*"` finds campaigns that START with "B2B"

  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**: "Lead" ≠ "lead". Use CONTAINS or regex for flexible matching
  * **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="Why are my demographic metrics missing or inconsistent?">
  LinkedIn has several restrictions on demographic data:

  * **Top 100 limit**: API only supports top 100 demographic values per creative per day
  * **Rounding**: Metrics are approximate and rounded down to 0 for small values (less than 3)
  * **Daily aggregation**: Small daily values may not sum correctly over time periods

  To minimize issues, select the highest reporting level possible (account vs campaign level).
</Accordion>

<Accordion title="Why is data missing for some campaigns?">
  Campaign data may be missing if:

  * **Draft status**: Campaigns in draft status cannot be retrieved
  * **Paused status**: Paused campaigns may not return data
  * **Creative issues**: Creatives with malformed URLs or rejection status
  * **API errors**: Temporary LinkedIn API issues preventing data retrieval
</Accordion>

<Accordion title="Why doesn't the creative name match LinkedIn UI?">
  The creative name in reports comes from the content object created in LinkedIn, which may differ from what's displayed in the UI. This is how LinkedIn's API provides the data and is expected behavior.
</Accordion>

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

  * `spend > 0`
  * `impressions > 0`
  * `clicks > 0`
    This ensures you only get data for campaigns with actual performance.
</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 in draft status
  * **Permissions**: You may lack proper access to the selected accounts
  * **Metrics compatibility**: Some metric/dimension combinations aren't supported
</Accordion>

<Accordion title="Why do I get 'REVOKED_ACCESS_TOKEN' error?">
  This error indicates your LinkedIn credentials have expired (LinkedIn requires annual renewal). To fix:

  1. **Reconnect your data source** in the connection settings
  2. **Re-authenticate** with your LinkedIn account
  3. **Update credentials** to restore API access

  This is a LinkedIn security policy requiring yearly credential updates.
</Accordion>

<Accordion title="Why are demographic values approximated?">
  LinkedIn provides approximate demographic metrics to protect user privacy:

  * **Rounding**: Values are rounded down, small numbers become 0
  * **Aggregation**: Daily small values may not sum to period totals correctly
  * **Sampling**: Large datasets may be sampled for performance

  This is LinkedIn's standard behavior to balance data utility with privacy protection.
</Accordion>
