Skip to main content

Monthly Reports

Retrieve the same monthly report LinkForty emails on the 1st of each month, as data.

Overview

A monthly report is a single object covering one calendar month for your workspace: clicks with month-over-month change, a daily series, top links with share, sources, countries and devices, app installs and attribution, events and revenue, and the sentences and recommended actions the email shows. It is available on every plan — the dashboard's analytics windows are limited by your plan, the monthly report is not.

A month that has ended is generated once and stored. The stored copy is exactly what was emailed; requesting it again returns the same data. The current month is built on request from live data and is not stored.

List Available Months

GET /api/reports/monthly

Authentication

Requires a valid JWT or API key. See Authentication.

Response

{
"reports": [
{ "period": "2026-09", "label": "September 2026", "generatedAt": null, "live": true },
{ "period": "2026-08", "label": "August 2026", "generatedAt": "2026-09-01T13:00:05.000Z", "live": false }
]
}

live: true marks the current month. Months appear in the list once a report has been generated for them — by the monthly email, or by the first request to the endpoint below.

Get a Month's Report

GET /api/reports/monthly/:period

Path Parameters

ParameterTypeDescription
periodstringThe month as YYYY-MM, e.g. 2026-08

Query Parameters

ParameterTypeRequiredDescription
regenerate1NoRebuild a finished month from current data, replacing the stored copy. Workspace owners only. Use it when events arrived after the 1st.

Response

The report object. Sections that depend on a data stream are null when the workspace has never had that stream (installs without the SDK, pixel without the website pixel, events without either), and present with zeros when it has but the month was quiet.

{
"organization": { "id": "…", "name": "Trailhead Coffee", "slug": "trailhead-coffee", "tier": "pro" },
"period": { "type": "monthly", "start": "2026-08-01", "end": "2026-09-01", "label": "August 2026", "priorLabel": "last month" },
"kpis": {
"clicks": { "value": 22140, "prior": 15940, "deltaPct": 39 },
"uniques": { "value": 12310, "prior": 11402, "deltaPct": 8 },
"installs": { "value": 884, "prior": 703, "deltaPct": 26 },
"sessions": null
},
"daily": [{ "day": "2026-08-01", "clicks": 512 }, "…"],
"bestDay": { "day": "2026-08-19", "clicks": 1821 },
"topLinks": [{ "label": "Fall Roast Launch", "sublabel": "/fallroast", "value": 6912, "share": 0.31 }, "…"],
"otherLinks": { "count": 6, "clicks": 6126 },
"zeroClickLinks": 2,
"sources": [{ "label": "Instagram", "value": 10184, "share": 0.46 }, "…"],
"countries": [{ "label": "United States", "value": 17269, "share": 0.78 }, "…"],
"devices": [{ "label": "mobile", "value": 17933, "share": 0.81 }, "…"],
"installs": { "byPlatform": [{ "label": "ios", "value": 541, "share": 0.61 }, "…"], "attributed": 389, "attributionRate": 0.44 },
"pixel": null,
"events": {
"total": { "value": 7412, "prior": 6030, "deltaPct": 23 },
"byName": [{ "label": "screen_view", "sublabel": "app", "value": 5980, "share": 0.81 }, "…"],
"revenue": [{ "currency": "USD", "amount": 18402.5, "prior": 14190 }],
"conversions": null,
"perInstall": 8.38
},
"housekeeping": { "linksCreated": ["Fall Roast Launch", "…"], "linksExpired": ["Summer Cold Brew"], "linksDisabled": 0, "linksWithStoreUrls": 3 },
"insights": {
"headline": "Clicks up 39% on last month — 22,140 this month.",
"links": "Two links carry 52% of your traffic: Fall Roast Launch and App Download — Instagram bio.",
"events": "$18,402.50 in tracked revenue across 7,412 events.",
"actions": [{ "title": "Enable app-token attribution", "body": "…" }]
},
"generatedAt": "2026-09-01T13:00:05.000Z"
}

kpis.uniques is null when your plan's raw click history no longer reaches back to the start of the month — unique visitors cannot be reconstructed after that, so the report omits them rather than guess.

Errors

StatuserrorWhen
400INVALID_PERIODperiod is not YYYY-MM
400PERIOD_IN_FUTUREThe month has not started
400PERIOD_LIVEregenerate=1 on the current month
403INSUFFICIENT_ROLEregenerate=1 by a non-owner
404PERIOD_BEFORE_WORKSPACEThe month ended before the workspace was created
404PERIOD_NOT_RETAINEDMore than 400 days ago