# Social Listening API - Audience Intelligence, Pulsar (`nabeelbaghoor/social-listening-audience-intelligence-api`) Actor

Export social listening and audience intelligence data from your own Pulsar account: TRAC searches, posts and reactions with impressions, engagement, reach and visibility, and CORE brands, profiles, post metrics and totals. Read only GraphQL queries. Bring your own token.

- **URL**: https://apify.com/nabeelbaghoor/social-listening-audience-intelligence-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Social media, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 mention or post returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Social Listening API - Audience Intelligence, Pulsar

Export the social listening and audience intelligence data your Pulsar account already holds into a dataset, a spreadsheet or a warehouse: TRAC searches, the posts and reactions they collected with impressions, engagement, reach and visibility, and CORE brands, profiles and post metrics. Uses your own Pulsar API token, sends read-only GraphQL queries, and charges only for rows that carry data.

### What it collects

- **TRAC searches**: every search on your Pulsar subdomain with its name, search hash, status (READY or EDIT), start date and total contents, sorted by name or daily velocity and filtered by search status and realtime status (STARTED, STOPPED, NOT_PRESENT). Paged through the whole list.
- **TRAC search results (mentions)**: the posts and reactions a search collected, with content, source (X, Reddit, Instagram, Pinterest, Facebook pages, podcasts and the other sources your search covers), author name, publication time, impressions, engagement, likes, comments, shares, views, syndicated copies, potential reach and Pulsar visibility score. Filter by date range, content type (posts or reactions), source, country and hashtag.
- **CORE brands and profiles**: the brands you track (owned or competitor) with their brand set and the social profiles inside each, with source and whether the profile is connected.
- **CORE profile metrics**: posts, comments, engagements and impressions for a brand's profiles over a date range, summed, averaged or counted, together or one row per profile.
- **CORE profile posts**: each post of a profile with its content, comments, likes, engagement and impressions.
- Read only, pay per result, bring your own token. Nothing in your Pulsar account is created, edited, started or stopped.

### Input

| Field | What it does |
| --- | --- |
| What to read | TRAC searches (default, needs nothing else), TRAC search results, CORE brands and profiles, CORE profile metrics or CORE profile posts. |
| Sort searches by, Search status, Realtime status | TRAC searches mode. |
| Search IDs | TRAC search results. The search hashes the TRAC searches mode lists. |
| Content type, Sources, Countries, Hashtag | TRAC search results filters. |
| Brand ID, Profile IDs | CORE profile metrics and profile posts. The CORE brands mode lists them. |
| Aggregation, One row per profile | CORE profile metrics: SUM, AVG or COUNT. |
| Start date, End date | Data modes, as YYYY-MM-DD in UTC. Defaults to the last 7 days. |
| Days per request | Data modes read the range in windows of this many days (default 1) because each request returns one page. |
| Maximum results | Row cap for the run. |
| Requests per minute | Pacing, up to the provider's 5 a second. |
| API bearer token | Your own Pulsar API token, as a secret input. |

Run TRAC searches first to get search hashes, then TRAC search results with those hashes. For CORE, run CORE brands and profiles first, then profile metrics or profile posts with a brand ID and its profile IDs.

### Limits on the Pulsar side

- API access is part of a Pulsar licence: your account manager enables it per user after Pulsar's product team approves the use case, and the token is issued per user and per subdomain.
- The API allows 5 requests a second. There is no total call limit.
- A page holds at most 100 results (CORE post pages hold 50). The provider documents a next token for paging but not how to send it back, so this actor reads one page per search (or profile) per date window. If a window has more results than a page, the log says so: lower Days per request to read more.
- Some X (Twitter) fields are masked by Pulsar's data contracts: user bio, follower count and coordinates are not available through the API.
- Only data already indexed in your TRAC searches or CORE brand sets is available.

### FAQ

#### What is Pulsar?

Pulsar (Pulsar Group plc) is an audience intelligence and social listening platform. TRAC is its social listening and audience research product; CORE is its owned and competitor social channel analytics product.

#### What does this actor read from the Pulsar API?

It sends documented GraphQL read queries to the Pulsar GraphQL API v2.0: the searches query on the TRAC metadata endpoint, the results query on the TRAC data endpoint, and the brands, posts, comments, engagements, impressions and results queries on the CORE data endpoint. It never sends a mutation.

#### Do I need my own Pulsar API token?

Yes. This is bring your own key. Ask your Pulsar account manager to enable API access for your user, then generate the token on the API token page of your Pulsar account. The same bearer token works on the TRAC and CORE endpoints.

#### Where do I find a search hash, brand ID or profile ID?

Run the TRAC searches mode for search hashes (also shown on the Search Status page in Pulsar), and the CORE brands and profiles mode for brand and profile IDs.

#### Can it export more than one page of mentions?

Yes, by date window. Each request returns one page, so a wide date range is split into windows (one day by default, newest first) and each window is read separately. Use a smaller window or a narrower filter for very busy searches.

#### Does each mention have an ID or URL?

The documented result fields carry no ID or URL, so each row gets a stable hash of its search, date, source, author and content for de-duplication.

#### What happens if my token is missing or rejected?

The run ends cleanly, with no rows and no charge, and the status message says what to fix. A missing token is caught before any network call.

### Example output

```json
{
    "mode": "results",
    "modeLabel": "TRAC search results",
    "recordType": "mention",
    "found": true,
    "searchId": "88fffa8cf1aa11abc468f7522c71b932",
    "brandId": null,
    "profileId": null,
    "id": "5c1f0e7a2b9d4e8f6a31",
    "name": null,
    "date": "2024-02-23T15:05:27Z",
    "source": "X",
    "author": "Example Account",
    "content": "Climate change has a negative impact on children...",
    "impressions": 5495,
    "engagement": 0,
    "likes": 0,
    "comments": null,
    "shares": 0,
    "views": null,
    "potentialReach": 49956,
    "visibility": 91.94,
    "syndicationContentsCount": null,
    "totalHits": 8925,
    "dateFrom": "2024-02-23T00:00:00Z",
    "dateTo": "2024-02-23T23:59:59Z",
    "retrievedAt": "2026-10-03T09:00:00.000Z",
    "note": null
}
```

### Keyword map

- social listening API, social media listening export, Pulsar API, Pulsar TRAC API, Pulsar CORE API
- audience intelligence data, brand mentions export, social media monitoring data, share of voice data
- post engagement metrics, impressions and reach export, competitor social profile analytics
- GraphQL social listening connector, Power BI or warehouse export of Pulsar data

### Source

Built from Pulsar's own API documentation at https://doc.pulsarplatform.com/pulsar-documentation (TRAC Metadata Endpoint, Data Endpoint TRAC, Data Endpoint CORE, Overview and FAQs) and the help centre articles at https://intercom.help/pulsar/en/articles/612893-pulsar-api, checked on 2026-10-03.

# Actor input Schema

## `mode` (type: `string`):

TRAC searches lists every search on your Pulsar subdomain and needs nothing else, so it is the default. TRAC search results reads the posts and reactions of one or more searches. CORE brands and profiles lists the brands and social profiles you track. CORE profile metrics reads post, comment, engagement and impression totals or averages for a brand's profiles. CORE profile posts reads the metrics of each post of those profiles.

## `sortBy` (type: `string`):

TRAC searches. Order by name or by daily velocity. Leave empty for the provider default.

## `searchStatus` (type: `array`):

TRAC searches. Keep only searches in these states: READY (collected and ready) or EDIT (still being set up). Leave empty for all.

## `realtimeStatus` (type: `array`):

TRAC searches. Keep only searches whose realtime collection is STARTED, STOPPED or NOT_PRESENT. Leave empty for all.

## `searchIds` (type: `array`):

TRAC search results. The search hashes to read, as the TRAC searches mode lists them or the Search Status page shows them. Each search is read separately so every row carries its search ID.

## `contentType` (type: `string`):

TRAC search results. Posts only, reactions (replies and comments) only, or both.

## `sources` (type: `array`):

TRAC search results. Keep only these Pulsar sources, written as the platform names them, such as X, REDDIT, INSTAGRAM, PINTEREST, FACEBOOK_PAGE or PODCAST. Leave empty for all sources in the search.

## `countries` (type: `array`):

TRAC search results. Keep only results from these countries, as two-letter codes such as US or GB.

## `hashtags` (type: `string`):

TRAC search results. Keep only results with this hashtag, such as fashion (a leading # is removed).

## `brandId` (type: `string`):

CORE profile metrics and profile posts. The numeric brand ID the CORE brands and profiles mode lists, such as 186.

## `profileIds` (type: `array`):

CORE profile metrics and profile posts. The numeric IDs of the brand's profiles, as the CORE brands and profiles mode lists them.

## `metric` (type: `string`):

CORE profile metrics. Sum, average or count the posts, comments, engagements and impressions over the date range.

## `splitByProfile` (type: `boolean`):

CORE profile metrics. Read each profile separately instead of all profiles together.

## `dateFrom` (type: `string`):

Data modes. The first day to read, as YYYY-MM-DD (UTC), or a full time such as 2026-09-01T00:00:00Z. Defaults to 6 days before the end date.

## `dateTo` (type: `string`):

Data modes. The last day to read, as YYYY-MM-DD (UTC, read to 23:59:59), or a full time. Defaults to today.

## `windowDays` (type: `integer`):

TRAC search results and CORE profile posts. The date range is read in windows of this many days, newest first, because each request returns one page of results. Smaller windows read further into busy searches; 0 reads the whole range in one request.

## `maxResults` (type: `integer`):

The most rows this run returns and charges for.

## `requestsPerMinute` (type: `integer`):

Pacing. The provider allows 5 requests a second (300 a minute).

## `apiKey` (type: `string`):

Your own Pulsar API bearer token, for an API-enabled user on your subdomain, from your account manager or the API token page. Stored as a secret. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "searches",
  "contentType": "all",
  "metric": "SUM",
  "splitByProfile": false,
  "windowDays": 1,
  "maxResults": 100,
  "requestsPerMinute": 120
}
```

# Actor output Schema

## `records` (type: `string`):

One row per search, mention, brand, profile metric set or post.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/social-listening-audience-intelligence-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/social-listening-audience-intelligence-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call nabeelbaghoor/social-listening-audience-intelligence-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/social-listening-audience-intelligence-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CxukN8mSwrbCkkrx0/builds/0G9npWnOiUdWR7Vqe/openapi.json
