Campaigns and EMV
A campaign groups the posts of a launch or a creator push inside a project, so you can measure its reach, engagement, earned media value (EMV) and cost per result. Posts are counted live from the project's mentions; nothing is copied.
Create a campaign
- Open the project's Campaigns tab and click New campaign.
- Enter a Name (for example "Autumn collection launch") and an optional Description.
- Set Starts and Ends. Leave Ends empty for an ongoing campaign. Days are in the project's timezone.
- Optional: enter the Budget (USD).
- Add Hashtags and Keywords. A post counts when it has one of the hashtags or contains one of the keywords. Leave both empty to count every post in the dates.
- Optional: list Only these creators (handles such as
@linh.ootd) to count only their posts. - Optional: Override EMV rates for this campaign.
- Click Create campaign.
Creators you list in a campaign are treated as booked: their matching posts within the campaign dates and hashtags count as Paid media on the dashboard. A campaign without a creator list only tracks hashtags; its posts stay Earned.
KPIs
| KPI | Definition |
|---|---|
| Posts, Creators | Posts counted in the campaign and their distinct authors |
| Views, likes, comments, shares | Sums over the posts |
| Engagement | Likes + comments + shares |
| Engagement rate | Engagement ÷ views |
| CPM | Budget ÷ views × 1,000 (cost per thousand views) |
| CPE | Budget ÷ engagement (cost per engagement) |
| EMV | Earned media value (below) |
| ROI | EMV ÷ budget |
Only posts count. Comments that mention the campaign are counted separately as comment mentions; replies are already part of each post's comment count. Hidden and irrelevant posts are left out.
The campaign report also shows a daily series, the top posts and the top creators.
EMV
EMV estimates what the views, likes, comments and shares would cost as ads: the sum of each metric times a USD rate per platform. Default rates:
| Platform | View | Like | Comment | Share |
|---|---|---|---|---|
| TikTok | 0.008 | 0.04 | 0.30 | 0.40 |
| 0.012 | 0.08 | 0.50 | 0.50 | |
| 0.006 | 0.05 | 0.30 | 0.50 | |
| YouTube | 0.02 | 0.10 | 0.60 | 0.60 |
| Threads | 0.01 | 0.05 | 0.30 | 0.40 |
| X | 0.005 | 0.04 | 0.25 | 0.30 |
| 0 | 0.04 | 0.30 | 0.50 |
Other platforms have their own defaults; the editor shows every rate. You can override the rates for the whole project and again for a single campaign: the campaign override wins over the project, which wins over the defaults. Override only the values you need; the rest keep their defaults.
Share a public campaign report
The Public report is a read-only page for a client, without an account: KPIs, charts, top posts and creators.
- Open the campaign and, under Public report, click Create a report link.
- Copy the link. It looks like
https://lantfly.com/report/<token>. - To hide costs from the client, edit the campaign and clear Show budget, CPM and CPE on the public report.
Anyone with the link can open the report and print it to PDF from the browser. When the project belongs to an agency client, the report carries the agency's branding. Stop sharing disables the link; New link replaces it.
Lantfly only stores a hash of the link's token, so the link appears only right after you create it. To copy it again, make a new link; the old link stops working. Only project managers see and manage public links.
Export
Export a campaign as Posts (CSV) or Summary + posts (XLSX), most viewed first, up to 10,000 rows. The XLSX file has a Summary sheet with the KPIs.
With the API
curl -X POST https://lantfly.com/api/v3/listening/projects/$PROJECT_ID/campaigns \
-H "Authorization: Bearer $LANTFLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Autumn collection launch",
"starts_on": "2026-11-01",
"ends_on": "2026-11-30",
"budget_usd": 5000,
"hashtags": ["velyniqfall"],
"creators": ["linh.ootd", "mai.style"],
"emv_rates": { "tiktok": { "views": 0.01 } }
}'
| Endpoint | Purpose |
|---|---|
GET /listening/projects/{project}/campaigns | Campaigns with KPIs |
GET /listening/projects/{project}/campaigns/{id} | The campaign report |
GET /listening/projects/{project}/campaigns/{id}/mentions | Posts counted in the campaign |
GET /listening/projects/{project}/campaigns/{id}/export | CSV or XLSX |
PATCH /listening/projects/{project}/campaigns/{id} | Update it, including report_show_costs |
POST /listening/projects/{project}/campaigns/{id}/share | Public link on (enabled: true, a new token each time) or off (enabled: false) |
GET /api/public/reports/{token} | The public report, no authentication (60 requests per minute) |