# Influencer Campaign Analytics API - Posts, Creators, Storyclash (`nabeelbaghoor/influencer-campaign-analytics-api`) Actor

Export influencer campaign data from your own Storyclash account: every campaign, every tracked post on Instagram, TikTok, YouTube, Facebook and X with reach, interactions and media value, and every creator with followers, cost, shop sales and link clicks. Read only. Bring your own token.

- **URL**: https://apify.com/nabeelbaghoor/influencer-campaign-analytics-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 $5.00 / 1,000 campaign 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

## Influencer Campaign Analytics API - Posts, Creators, Storyclash

Export your influencer campaign results from Storyclash into a dataset, a spreadsheet or a warehouse, with one row per campaign, tracked post or creator. Uses your own Storyclash API token, never changes anything in your account, and charges only for rows that carry data.

### What it collects

- **Campaigns and market reports**: every campaign in your account with its ID, name, start and end date, folder and type, plus the link to it in the app.
- **Campaign posts** on Instagram, TikTok, YouTube, Facebook and X: publication time, platform, post type (post, story, reel, video, shorts), media type, text, direct link, swipe-up link, your tags, mentioned accounts, likes, comments, shares, interactions, video views and length, engagement rate, estimated reach and estimated media value (EMV).
- **The creator behind each post**, joined in: name or alias, creator type (influencer, brand, media), country, handle, profile URL and follower count on the post's platform.
- **Campaign creators**, including those who have not posted yet: handles, profile URLs and followers on every platform, category, country, language, your additional fields, the cost you assigned, and the shop integration sales (revenue, ROAS, conversions, new and returning customers, discount code usage, average order value) and tracked link data (clicks, top country, city, device and referrer).
- **Filters**: a time window inside the campaign, platforms and post types for posts, and campaign or market report for the list.
- Read only, pay per result, bring your own token.

### Input

| Field | What it does |
| --- | --- |
| What to read | Campaigns (default, needs nothing else), campaign posts or campaign creators. |
| Campaign IDs | Posts and creators. The number in `app.storyclash.com/campaigns/detail/1234`, or the whole URL. Up to 100 per run. |
| Start date / End date | Posts and creators. A window inside the campaign period, as YYYY-MM-DD, an ISO timestamp or unix seconds. |
| Platforms / Post types | Posts. Keep only Instagram, TikTok, YouTube, Facebook or X posts, and only posts, stories, reels, videos or shorts. |
| Campaign type | Campaigns. All, campaigns or market reports. |
| Maximum results | Row cap for the run. |
| Requests per minute | Pacing. |
| API token | Your own Storyclash API token, as a secret input. |

Run the campaigns mode first, then the posts or creators mode with the campaign IDs it lists.

### Limits on the Storyclash side

- Posts come 1,000 per page; the actor pages on its own until the campaign is read or the row cap is hit.
- One request per hour for each result page of a campaign. Ten campaigns can each be read in full once an hour. While Storyclash sets up a new API account the limit is one request every 10 seconds, which is the actor's default pace.
- At most 250,000 posts per account. The provider answers "Maximum results reached" past that, and the actor stops with a note.
- The time window can only narrow the campaign period set in the app, never extend it.

### FAQ

#### What is an influencer campaign analytics API used for?

Moving campaign results out of the Storyclash dashboard into your own reporting. An agency pulls every post of a client campaign with reach, interactions and EMV into Looker Studio or Power BI. A brand team joins creator cost with shop revenue and ROAS to rank creators by return. An analyst loads all campaigns into a warehouse each week to compare platforms, formats and creator tiers.

#### Which data source does this actor read?

The Storyclash external API at app.storyclash.com, through the two read routes in the public Storyclash API documentation: the campaign list and the campaign data route (campaign, posts and creators). Storyclash is an influencer marketing platform from Linz, Austria; its API host and documentation were checked live on 2026-10-04.

#### Do I need a Storyclash API token?

Yes. This actor is bring-your-own-token and never ships one. Storyclash issues the API token on request: ask your Storyclash customer success manager to activate the API for your account. Paste the token into the input, or set it once as the `DATA_API_KEY` environment secret. A missing or refused token ends the run cleanly with a message saying which it was.

#### How do I get every post of a campaign with reach and EMV?

Choose the posts mode and set the campaign ID. Each row is one post, with `estimatedReach`, `interactions`, `estimatedMediaValue`, `likes`, `comments`, `shares`, `videoViews` and `engagementRate`, plus the creator's name, handle, country and followers on that platform. Add platforms or post types to narrow it, or a start and end date to read one week.

#### How do I see which creators drove sales?

Choose the creators mode with the campaign ID. With the Storyclash shop integration connected, each creator row carries `revenue`, `roas`, the conversion counts and every other shop field with a `shop_` prefix, the tracked link clicks with a `link_` prefix, and the `cost` you assigned.

#### Can this actor change anything in my Storyclash account?

No. Both calls are GETs. The creator import route, which adds creators to your account, is not used. The token travels as a URL parameter as Storyclash requires; the actor never logs it and strips it from any error text.

#### How is it priced?

Pay per result: one price per campaign listed, one per post and one per creator, the creator being the richest record. Rows that find nothing, and posts removed by your filters, are free. Your Storyclash subscription applies separately.

### Example output

```json
{
  "mode": "posts",
  "modeLabel": "Campaign posts",
  "recordType": "post",
  "found": true,
  "campaignId": 1234,
  "campaignName": "Spring launch 2026",
  "id": 987654,
  "name": "Jane Example",
  "date": "2026-04-03T17:21:01.000Z",
  "platform": "Instagram",
  "postType": "Reel",
  "creatorId": 123,
  "creatorName": "Jane Example",
  "creatorType": "influencer",
  "country": "DE",
  "followers": 184000,
  "interactions": 9120,
  "estimatedReach": 61200,
  "estimatedMediaValue": 1450,
  "url": "https://www.instagram.com/reel/EXAMPLE/",
  "timestamp": 1775236861,
  "mediaType": "Video",
  "text": "Our spring picks are here #ad",
  "directLink": "https://www.instagram.com/reel/EXAMPLE/",
  "linkedUrl": null,
  "linkToPost": "https://app.storyclash.com/campaigns/detail/1234?postId=987654",
  "tags": ["paid"],
  "likes": 8700,
  "comments": 320,
  "shares": 100,
  "videoViews": 74000,
  "videoLength": 28,
  "engagementRate": 4.96,
  "mentions": [{ "handle": "@examplebrand", "creatorType": "brand" }],
  "creatorHandle": "jane.example",
  "creatorProfileUrl": "https://www.instagram.com/jane.example/",
  "retrievedAt": "2026-10-04T09:14:52.118Z",
  "note": null
}
```

Values are illustrative; every field is one the provider documents. Creator rows carry the provider's creator fields under their own names (`urlInstagram`, `followersTiktok`, `youtubeName`, `additionalFields`, `cost` and so on) plus `shop_*` and `link_*` columns; campaign rows carry `startDate`, `endDate`, `folderName` and `campaignType`.

### Keyword map

influencer campaign analytics API, influencer marketing API, influencer reporting API, campaign performance export, creator analytics, Instagram Reels and Stories metrics, TikTok campaign metrics, YouTube Shorts metrics, estimated media value (EMV), influencer ROI and ROAS, influencer shop sales, tracked link clicks, Storyclash API, Storyclash campaign export, Storyclash creator data.

# Actor input Schema

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

Campaigns lists every campaign and market report in your account and needs nothing else, so it is the default. Campaign posts reads every post the chosen campaigns tracked, with metrics and creator. Campaign creators reads every creator in the chosen campaigns, including those without posts, with followers, cost, shop sales and link clicks.

## `campaignIds` (type: `array`):

Posts and creators modes. The campaign number, as the campaigns mode lists it, or the campaign URL (app.storyclash.com/campaigns/detail/1234). Up to 100 per run.

## `from` (type: `string`):

Posts and creators modes. Read from this date (YYYY-MM-DD, an ISO timestamp or unix seconds). It must fall inside the campaign period; leave empty for the campaign start.

## `to` (type: `string`):

Posts and creators modes. Read up to this date, inclusive for a plain date. It must fall inside the campaign period; leave empty for the campaign end.

## `platforms` (type: `array`):

Posts mode. Keep only posts from these platforms. Leave empty for all.

## `postTypes` (type: `array`):

Posts mode. Keep only these post types. Leave empty for all.

## `campaignType` (type: `string`):

Campaigns mode. Keep campaigns, market reports or both.

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

The most rows this run returns and charges for. The provider returns posts 1,000 per page and caps an account at 250,000 posts.

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

Pacing. The provider allows one request per hour for each result page of a campaign, and one every 10 seconds while it sets up a new API account.

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

Your own Storyclash API token, which Storyclash issues on request through your customer success manager. Stored as a secret. You can instead set the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "mode": "campaigns",
  "campaignType": "all",
  "maxResults": 100,
  "requestsPerMinute": 6
}
```

# Actor output Schema

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

One row per campaign, post or creator.

# 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/influencer-campaign-analytics-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/influencer-campaign-analytics-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/influencer-campaign-analytics-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/influencer-campaign-analytics-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/fWMaNfZA2ARYW92nt/builds/YPD6RrBFxXo8vfnxO/openapi.json
