Followers, reach, engagement, top publications and posting times. Read-only. Setup and authentication are on the main MCP page.

📄

AI-readable version: mcp.md — the complete reference in one plain-Markdown file, for agents and LLMs. Index: llms.txt

Analytics

⚠️

Analytics profiles are not publishing profiles. They are a separate connection with separate IDs and no link between them — a social account can be connected to publishing, to analytics, to both, or to neither. Analytics IDs carry an an_ prefix (an_66f3c1d2e4b0a1c2d3e4f5a6) so passing the wrong one fails immediately instead of silently returning nothing. Start every analytics task with analytics_profiles_list.

ToolDescription
analytics_profiles_listList profiles that have analytics — call this first
analytics_metrics_listMetric/chart catalog: meanings, formulas, per-platform availability
analytics_overviewHeadline numbers for a period — followers, reach, posts, engagement
analytics_audienceFollowers over time plus demographics where available
analytics_postsPost, story or profile metrics over time
analytics_top_postsRank publications by a metric
analytics_best_timeWeekday × hour engagement heatmap
analytics_compare_periodsPeriod over period, with absolute and percent change

What differs per platform

InstagramFacebookLinkedInTikTokTwitter/X
analytics_overview
Followers
Demographics
Stories (type: stories)
Profile metrics (type: profile)
analytics_top_posts
analytics_best_time

Don't memorize that table — read capabilities.endpoints from analytics_profiles_list, which also reflects the account's plan and connection state.

Reading the numbers correctly

Tool Reference

Detailed parameters for each MCP tool. Required fields must always be provided; optional fields can be omitted.

Analytics

All analytics tools are read-only and share the same period parameters:

ParameterTypeDescriptionRequired
analytics_profile_idstringFrom analytics_profiles_list, always an_.... Not a publishing profile_id.Yes
date_fromstringYYYY-MM-DD in the account timezone. Defaults to 30 days before date_to.No
date_tostringYYYY-MM-DD, inclusive. Defaults to today.No
granularitystringday (default), week, monthNo
timezonestringIANA name. Defaults to the account timezone.No

Maximum range: 400 days at day granularity, about 3 years at week/month.

analytics_profiles_list

Call this first. Optional platform filter. Each profile returns:

FieldDescription
idAnalytics profile ID, always an_...
capabilitiesWhich analytics tools work for this profile, allowed sort_by values, supported granularities
coverageFrom which date data actually exists, and whether the initial backfill finished
statusinactive means the network token expired — collection is paused until the user re-authorizes it in the dashboard
linked_publish_profilePublishing profile for the same social account, or null. Use its id in posts_create — never an an_... id.

analytics_metrics_list

Catalog of metrics and charts. Optional platform filter. Metrics with source: "derived" are computed by Onlypult and have no equivalent in the network's own statistics; formula says exactly how.

analytics_overview

Headline numbers for a period, grouped by category. Add include_series: true to also get per-interval data points (off by default to keep responses small).

analytics_audience

Follower dynamics and, where the network provides it, gender / age / countries / cities / languages. TikTok and Twitter/X report follower counts only.

analytics_posts

Metrics over time. type: posts (default), stories (Instagram only), profile (profile views and contact taps; not on TikTok). For "which posts performed best" use analytics_top_posts instead.

analytics_top_posts

ParameterTypeDescriptionRequired
typestringposts (default) or stories (Instagram only)No
sort_bystringRanking metric — platform-dependent, see capabilities.top_posts_sort_by. Default published_at.No
sort_dirstringdesc (default) for best-first, asc for worst-firstNo
limitnumber1–50, default 20No
skipnumberOffset for pagingNo
media_typesstring[]image, video, gallery, link, article, poll, …No

Not available for Twitter/X. Slower and rate-limited more tightly than other analytics tools, because media details are fetched from the social network live. A wrong sort_by returns the allowed values in details.allowed. caption is truncated to 500 characters and marked content_trust: untrusted_external.

analytics_best_time

Weekday × hour heatmap of interactions and engagement rate, plus posting frequency and best-performing hashtags. day is 0 = Monday … 6 = Sunday, hour is 0–23 in the requested timezone — convert to the account timezone from account_get before using it in publish_at. Prefer 60–90 day periods; shorter ones are noisy.

analytics_compare_periods

Same aggregates as analytics_overview, for two periods, with change per metric. The baseline defaults to the equally long period right before date_from; override with compare_date_from / compare_date_to. change.percent is null when the baseline value was zero.

Analytics errors

CodeMeaning
analytics_not_availableThe plan does not include Analytics
analytics_profile_not_foundUnknown ID, no access — or a publishing profile_id was passed by mistake
analytics_platform_unsupportedThis tool does not apply to this platform (e.g. stories on Facebook)
analytics_metric_unavailableUnknown chart name, or not available for this platform
analytics_granularity_unsupportedOnly day, week, month are supported
analytics_range_too_largeNarrow the period or use a coarser granularity
analytics_data_not_readyInitial collection still running — retryable
analytics_profile_reauth_requiredThe network connection expired; the user must re-authorize it
analytics_upstream_unavailableAnalytics service or social network temporarily down — retryable

Example conversations

Performance summary

You: How is my Instagram doing this month?

Assistant: analytics_profiles_list (pick the an_… id) → analytics_overview for the month → reports the numbers, and mentions coverage if the profile started collecting mid-period

Month over month

You: Compare July to June across my accounts

Assistant: analytics_profiles_list → analytics_compare_periods per profile → summarizes change, saying "no baseline" where percent is null

Best posts, then new content

You: Find what worked best last quarter and draft five posts like it

Assistant: analytics_profiles_list → analytics_top_posts(sort_by="reach", limit=10) → summarizes the patterns → uses linked_publish_profile.id → posts_create with is_draft=true

Timing

You: When should I publish on TikTok?

Assistant: analytics_profiles_list → analytics_best_time over ~90 days → converts the top weekday/hour cells to the account timezone → posts_create with that publish_at

Unsupported combination

You: Show me Stories stats for my Facebook page

Assistant: sees capabilities.endpoints without "stories" → explains Stories analytics are Instagram-only and offers analytics_posts instead