Skip to main content

Field mapping: Data Lake → API

Written by Edouard Hesse

This section applies only if you currently use Traackr's Data Lake offering. Start with The API and the Data Lake, side by side.

You will find here one table per Data Lake file. Use it to check, before you migrate, that every field your pipeline reads has somewhere to come from. Each row gives the API field and the endpoint that returns it. The definition of each API field is in the API reference.

"not available" means there is no equivalent anywhere in the API. If one of those matters to you, tell support@traackr.com before you build.

Before you start

  • The ids do not change. Project ID is the campaign id, UID and Influencer UID are the creator_id, and Post id is the post_id. You can join your Data Lake history to API data directly.

  • Every endpoint is a GET. In the paths below, {campaignId} is the campaign id and {creatorId} is the creator_id.

  • Amounts stay in minor units, as in the Data Lake. Read currency before you convert: see Spend Data.

  • A metric the platform did not report is null, where the Data Lake left the cell empty or wrote -. It means "not measured", never zero. Spend is different: see the Total Spend and Total Cost rows.

  • Some labels become codes, and some names swap. The Data Lake column Content Type (Feed, Story) is the API's publication_type. The API's content_type is the Data Lake's Post Type. Each case is in the tables below.

projects/projects/projects.csv

Campaign metadata. → Campaign metadata and compliance

/v1/campaigns lists every campaign, 100 per request. /v1/campaigns/{campaignId} returns one campaign with all its fields: some fields are only there.

Data Lake

API field

Endpoint

Account ID

implicit: your key is account-scoped

-

Project ID

id

/v1/campaigns or /v1/campaigns/{campaignId}

Name

name

/v1/campaigns or /v1/campaigns/{campaignId}

Brand

brand.name (and brand.id, which the CSV did not have)

/v1/campaigns or /v1/campaigns/{campaignId}

Product Line

product_line

/v1/campaigns/{campaignId}

Objective

objective. The text "None" is a real value

/v1/campaigns/{campaignId}

Type

collaboration_type, as a code. Content Creation is SPONSORED_CONTENT. The others follow their label: PRODUCT_SEND, PRODUCT_COLLABORATION, EVENT, PHOTOSHOOT, TRIP, OTHER. null when no type is set

/v1/campaigns/{campaignId}

Created

created_at: a UTC timestamp, without the "by name" part

/v1/campaigns or /v1/campaigns/{campaignId}

Start Date / End Date

start_date / end_date: the same dates as in the file

/v1/campaigns or /v1/campaigns/{campaignId}

Keywords

keywords: one text expression, not a list

/v1/campaigns/{campaignId}

Influencers

stats.creators: every creator on the campaign, posted or not

/v1/campaigns or /v1/campaigns/{campaignId}

Categories

category: comma-separated text

/v1/campaigns or /v1/campaigns/{campaignId}

Currency

currency

/v1/campaigns or /v1/campaigns/{campaignId}

Budget

budget. null when no budget is set

/v1/campaigns/{campaignId}

Total Spend

spend. 0, not null, when nothing is recorded

/v1/campaigns or /v1/campaigns/{campaignId}

CPP, CPVID, CPE, CPV, CPSV

not computed: see Cost efficiency

-

New in the API, absent from the CSV: country_iso, modified_at, refreshed_at and the whole stats object, which includes activated_creators, the creators who posted (on both endpoints); po_number and instagram_story_tracking_enabled (on /v1/campaigns/{campaignId} only).

projects/influencers/influencers-all.json

Per-creator spend and deliverables. → Spend Data, Deliverables and fulfilment

Data Lake

API field

Endpoint

accountId

implicit

-

projectId

the campaign id in the path

-

uid

creator_id

/v1/campaigns/{campaignId}/creators

name

name

/v1/campaigns/{campaignId}/creators

customFirstName / customLastName

not available

-

email

not available

-

bio

description

/v1/campaigns/{campaignId}/creators

location

location.display, with .country and .country_iso

/v1/campaigns/{campaignId}/creators

audience

audience

/v1/campaigns/{campaignId}/creators

postsCount

Σ contracted_posts in deliverables.by_platform. It counts contracted posts, not published ones

/v1/campaigns/{campaignId}/creators/spend

costType[].name / .value

additional_costs.by_category[].category / .amount. The file gives the 4 system categories as codes; the API gives their labels: USAGE_RIGHTS → Usage Rights, EXCLUSIVITY → Exclusivity, AGENCY_FEE → Agency Fee, OTHER_COST → Other Cost. Custom categories keep their name. The file's text values become integers

/v1/campaigns/{campaignId}/creators/spend

productCosts[].name / .total_value / .total_count

name / cost / quantity. total_value was the cost of one unit, as cost is. subtotal gives cost × quantity

/v1/campaigns/{campaignId}/creators/{creatorId}/products

platforms.<platform>

platform, in lowercase: Instagram → instagram, YouTube → youtube. On each channel and each deliverable

/v1/creators/{creatorId}, /v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

platforms.<platform>.metrics (cpp … cpsv)

not computed

-

platforms.<platform>.channels[].uid

not available: an internal Traackr channel id. Match channels on platform and url

-

platforms.<platform>.channels[].url / .username

channels[].url / channels[].username

/v1/creators/{creatorId}

platforms.<platform>.channels[].audience

channels[].metrics.audience

/v1/creators/{creatorId}

platforms.<platform>.channels[].engagementRate

channels[].metrics.engagement_rate. The creator's figure on that channel, not scoped to the campaign

/v1/creators/{creatorId}

platforms.<platform>.channels[].totalAudienceCredibility

audiences[].credibility.from_followers, one entry per channel

/v1/creators/{creatorId}/audience

platforms.<platform>.channels[].engagedAudienceCredibility

audiences[].credibility.from_engaged_audience. Instagram only

/v1/creators/{creatorId}/audience

platforms.<platform>.deliverables[].type

media_type

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].count

number_of_posts

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].contentFee

content_cost: the fee for the whole line. agreed_rate gives the fee per post

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].engagementCollected

not available. It was false on story deliverables: media_type story tells you the same

-

…deliverables[].usageRights

usage_rights

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].externalBoosted

boosted_cost greater than 0

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].reviewBy / publishBy

review_by / publish_by

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].boostedFees[].value / .date

boosted_cost / boosted_on, one total per deliverable

/v1/campaigns/{campaignId}/creators/{creatorId}/deliverables

…deliverables[].boostedFees[].postId

not available: boosting is not tied to a post in the API

-

The structure is the same on both sides: deliverables belong to a platform, not to a channel. Each API deliverable carries its platform.

projects/influencers/influencers-summary.csv

Data Lake

API field

Endpoint

Account ID, Project ID

implicit / the campaign id in the path

-

UID

creator_id

/v1/campaigns/{campaignId}/creators

Name

name

/v1/campaigns/{campaignId}/creators

Custom First Name / Last Name

not available

-

Email

not available

-

Audience

audience

/v1/campaigns/{campaignId}/creators

Eng. Rate (Min) / (Max)

not available

-

Posts Count

Σ contracted_posts in deliverables.by_platform. An empty cell means 0

/v1/campaigns/{campaignId}/creators/spend

Total Cost

total_spend. A creator with nothing recorded is not listed. Asked directly on /v1/campaigns/{campaignId}/creators/{creatorId}/spend, it returns 0

/v1/campaigns/{campaignId}/creators/spend

CPP, CPVID, CPE, CPV, CPSV

not computed

-

Review Status ID / Label

review_status.id / review_status.label

/v1/creators/{creatorId}/segments

Review Status Expiration Date

not available: expired statuses cannot be detected

-

reports/posts/*.csv

Identity and content

Data Lake

API field

Endpoint

Account ID

implicit

-

Project ID

the campaign id in the path

-

Report ID

not needed: the API serves each campaign’s default report only.

-

Keyword Group

not needed. A campaign’s default report has one keyword group, Keywords: the campaign’s keywords, in keywords. Any other value comes from a custom report, which the API does not export

/v1/campaigns/{campaignId}

Date

published_at (UTC, as in the file)

/v1/campaigns/{campaignId}/posts

Influencer Name

name, matched on creator_id

/v1/campaigns/{campaignId}/creators

Influencer UID

creator_id

/v1/campaigns/{campaignId}/posts

Platform

platform

/v1/campaigns/{campaignId}/posts

Handle

channels[].username for that platform. A creator can have several channels on one platform, and handles change over time

/v1/creators/{creatorId}

Channel id

not available: an internal Traackr channel id

-

Post URL

url

/v1/campaigns/{campaignId}/posts

Post Title

description (the caption). On YouTube, title (the video title)

/v1/campaigns/{campaignId}/posts

Post id

post_id

/v1/campaigns/{campaignId}/posts

Post Native id

not available as a field. On TikTok and YouTube the platform's id is in url. On Instagram, url carries the short code, not the numeric id

-

Post Oauth Native id

not available

-

Content Type

publication_type: Feed → feed, Story → story. Also clip, stream, and video_on_demand on Twitch

/v1/campaigns/{campaignId}/posts

Post Type, Content Format

content_type: VIDEO → video, IMAGE (Photo) → image, CAROUSEL → album, MICRO_BLOG (Text) → text, UNKNOWN → unknown. null while a post is not yet collected

/v1/campaigns/{campaignId}/posts

Video Length

video_type: short_form, long_form, or null. A new classification: do not compare it with the old column

/v1/campaigns/{campaignId}/posts

Deliverable Type

not a field: apply Traackr's classification table in Deliverables and fulfilment

-

Metrics

All on /v1/campaigns/{campaignId}/posts, except the last 2 rows.

Data Lake

API field

Likes

metrics.reactions

Comments

metrics.comments

Shares, Instagram Shares

metrics.shares

Saves, Tiktok Saves

metrics.saves. On Instagram, it is filled where Instagram reports saves to Traackr, which the Saves column never showed

Engagements (total)

metrics.engagements, the same figure

Video Views, Video Plays

metrics.video_views: plays on Instagram and TikTok, views on YouTube. On Instagram, both raw figures stay in raw_metrics

Reach

metrics.actualized_reach

Impressions

metrics.impressions

Potential Reach

metrics.potential_reach

Engagement Rate

metrics.engagement_rate

Vitality Score

metrics.vit, on the same scale

Earned Media Value

not a field: compute it, see below

Video Plays Organic / Paid

metrics.organic_video_views / metrics.paid_video_views

TikTok Engagements Organic / Paid

metrics.organic_engagements / metrics.paid_engagements. The API fields exclude saves

TikTok Likes, Comments, Shares Organic / Paid

raw_metrics, for example tiktok_video_diggs_organic (diggs are TikTok likes)

TikTok Engagement Rate Organic / Paid

raw_metrics: tiktok_video_engagement_rate_organic / _paid

TikTok Two / Six Seconds Views

raw_metrics: tiktok_video_two_second_video_play / tiktok_video_six_second_video_play

Story Replies, Story Tap Forward, Story Tap Back, Story Exits

raw_metrics: instagram_story_replies, instagram_story_taps_forward, instagram_story_taps_back, instagram_story_exits

Avg View Time Secs, View Time Secs

raw_metrics on Instagram: instagram_avg_watch_time, instagram_video_view_total_time

Snapchat columns

raw_metrics. The names start with snapchat_ but do not follow the column names

Interactions, Screenshots, Subscribes, Swipe Ups, Swipe Downs, Unique Sessions

raw_metrics, where the platform reports them

TikTok Audience Gender, Age, Device

not available per post. /v1/creators/{creatorId}/audience gives the follower audience of each channel

Stream Avg / Peak Viewers, Stream Duration

not available

raw_metrics names depend on the platform and the post. Read the names present in each response rather than expecting a fixed list.

Earned Media Value

The API has no EMV field, but it has its main ingredient. If your post files carry the Earned Media Value column, divide it by the Vitality Score on the same row: within one account, the result is the same on every post. Multiply metrics.vit by that number to get the EMV the Data Lake gave you. The number comes from your account's EMV factor, so it changes if an administrator changes the factor.

reports/influencers/*.csv

Per-creator figures. The API computes them for you on /v1/campaigns/{campaignId}/creators/metrics: one row per creator who posted, paginated and sortable. → Campaign performance without doing the maths

Data Lake

API field

Endpoint

Account ID, Project ID

implicit / the campaign id in the path

-

Report ID, Keyword Group

not needed: see the same rows in reports/posts

-

Influencer UID

creator_id

/v1/campaigns/{campaignId}/creators/metrics

Influencer Name

name, matched on creator_id

/v1/campaigns/{campaignId}/creators

Audience

audience, matched on creator_id

/v1/campaigns/{campaignId}/creators

Mentions

post_count

/v1/campaigns/{campaignId}/creators/metrics

Engagements

engagements

/v1/campaigns/{campaignId}/creators/metrics

Video Views

video_views

/v1/campaigns/{campaignId}/creators/metrics

Story Views

impressions. Despite its name, the column summed the impressions of all the creator's posts, not only stories

/v1/campaigns/{campaignId}/creators/metrics

Potential Reach

potential_reach

/v1/campaigns/{campaignId}/creators/metrics

Engagement Rate

engagement_rate: computed differently, see below

/v1/campaigns/{campaignId}/creators/metrics

Brand Safety Status

removed

-

(new)

measured_post_count, reactions, comments, shares, saves, actualized_reach, vit, the other rates, and the organic/paid split

/v1/campaigns/{campaignId}/creators/metrics

For one creator only, /v1/campaigns/{campaignId}/creators/{creatorId}/metrics returns the same row.

Expect more rows. The Data Lake file held at most 25 creators. The API returns every creator who posted.

Expect a different engagement rate. The API divides the summed engagements by the summed potential reach of the posts that report engagements. The Data Lake column was not computed that way, so the two rarely match. Take the API rate as served, and do not recompute it from engagements ÷ potential_reach on the same row: the denominators differ.

reports/summary/reports-overview-summary.csv

The QA file. Its figures are on the campaign itself, in 2 places:

Data Lake

stats on /v1/campaigns or /v1/campaigns/{campaignId}

/v1/campaigns/{campaignId}/metrics

Account ID

implicit

implicit

Project ID, Project Name

id, name

campaign_id

Report ID

not available

not available

Unique Influencers

stats.activated_creators

creator_count

Total Posts

stats.posts

post_count

Engagements (total)

stats.engagements

engagements

Video Views

stats.video_views

video_views

/metrics is computed on each request; stats is refreshed on a schedule and can be up to a day behind. For a QA check against the posts, use /metrics. Both cover the campaign’s default report. Figures from custom reports are not in the API.

clickConversions/ and benchmark/

Not available in the API. See What the API does not cover yet.

Concept mapping

Data Lake

API

Project

Campaign

Influencer

Creator

Default report

the campaign itself: its posts are attached to it directly

Custom report

(not in the API)

Contracted post

Deliverable

Published post

Post

Export date, partition

(no equivalent: the API serves the current state only)

Aggregating a report yourself

/v1/campaigns/{campaignId}/metrics and /v1/campaigns/{campaignId}/creators/metrics

One folder per campaign

the campaign id in the URL


Last reviewed: 30 October 2026.

Did this answer your question?