X and Reddit social activity
Open Analytics → Notes → Social activity to connect public posts with chart context and recorded link visits. Connections belong to the selected application environment. This integration reads provider data; it does not publish, reply or message anyone.
Connect a network
- Open Manage connections, then Connect X or Connect Reddit.
- Enter a connection name, your exact website domain and an optional literal brand phrase.
wwwis included; other subdomains are separate. The domain and phrase cannot be changed after creation. - Add the provider credentials below and save. Credentials are encrypted in the server vault and never returned to the browser.
- Keep the application worker running. The initial import is queued immediately. Refresh the page to inspect sync status, posts and chart notes. Sync now queues a fresh import.
X: use an approved developer app bearer token with access to recent post search and post lookup. Access and charges depend on your X developer account. The importer calls the official X v2 API without author expansion.
Reddit: use an approved confidential app client ID, client secret and a descriptive User-Agent with a contact account, such as web:your-app:v1.0 (by /u/your-contact). The server requests an application-only OAuth token with client_credentials. Reddit approval and applicable access requirements still apply.
Console connection changes require analytics write access and a passkey verified within ten minutes. Pause a connection to stop imports, replace credentials through Edit connection, or remove the connection to revoke its local credential and delete its cached posts and automatic notes. Provider posts are unaffected.
Understand the results
The screen separates matched visits, unknown post sources, and conflicting evidence. A session can match one post using:
- An exact X or Reddit post URL in its first retained page referrer.
- An imported X
t.copath plus the same landing-page origin and path. - A generated post tracking tag, or a unique imported social UTM link with the same landing page and UTM tuple.
Generic x.com, t.co or reddit.com referrers do not identify a post. A post must precede the visit, target the configured website, and have been rechecked within 24 hours. Conflicting explicit signals remain unassigned. A nearby traffic spike never creates a match.
Expand Link evidence and tracking to copy a website link tagged for that post. The generated link keeps the original page path and removes its query parameters before adding utm_source, utm_medium=social and utm_content=spm-post-NETWORK-ID. Preserve any product-required parameters yourself before sharing. Links can be forwarded, so a match is a link association, not proof that the original network caused the visit. Nothing is shared automatically.
Engagement counts are the last available lifetime snapshot, not counts within your reporting period. Reddit score can be hidden. Raw post text requires people.pii.read; ordinary analytics readers receive generic post notes, canonical provider links and aggregates. Unchecked posts lose text visibility and matching after 24 hours.
Revenue appears only in Production with the Revenue module and revenue read access. It uses the latest retained visit in the selected 7- or 30-day window before a verified provider payment, then the first retained page view of that visit. A later direct visit replaces an earlier social visit. Refunds reduce the original payment date. Server-reported Payment API records are excluded. Currencies remain separate. Payments without a linked person are reported separately with unknown acquisition source.
Coverage and retention
Automatic imports run every six hours; the scheduler checks every 15 minutes. Search covers roughly the preceding seven days, with a short safety delay, up to 10 pages of 100 results. X reposts are excluded. Search results can be incomplete even below the cap; a capped import is explicitly labeled partial.
Each environment supports one connection per network and up to 2,000 retained posts per source. Retention follows the application's setting, capped at 90 days. Every import rechecks retained posts through provider ID lookup. Deleted, unavailable, out-of-retention or no-longer-matching posts and their automatic notes are removed. Failed imports preserve the prior snapshot and show a safe error. A paused source's old data becomes stale after 24 hours.
Requests use fixed provider endpoints, disallow redirects, and are bounded to 10 seconds and 4 MB each, with a two-minute import budget. Reports support 7, 30 or 90 days, up to 50,000 sessions and 50,000 payments per request. Larger reports require a shorter period. Rows paginate in groups of 200. The console never fetches arbitrary URLs from post text.
Management API
Use a Management API token with analytics read/write access; public ingest keys cannot access these endpoints. Add ?env=production, staging or development as needed.
Base path:
/api/v1/apps/{app}/analytics/notes/social
| Endpoint | Purpose |
|---|---|
GET / |
Report: days, window, currency, offset |
GET /sources |
Connection status without credentials |
POST /sources |
Create a source and queue its first import |
PUT /sources/{id} |
Rename, pause or replace credentials |
POST /sources/{id}/sync |
Queue an import |
POST /sources/{id}/remove |
Remove source, posts and automatic notes |
{
"label": "Website on X",
"domain": "example.com",
"keyword": "Example Product",
"credentials": { "kind": "x", "token": "YOUR_APP_BEARER_TOKEN" }
}
Reddit credentials:
{ "kind": "reddit", "clientId": "…", "clientSecret": "…", "userAgent": "…" }
Updates require revision, label, enabled and optional replacement credentials. Sync and removal use {"revision":1}. Stale revisions return a conflict. Financial fields are null when the caller lacks production revenue access; post text is null without sensitive-people access.
Provider references: X recent search, X search operators, X post lookup, Reddit Data API guidance, Reddit API reference, Reddit application-only OAuth.