Cross-account reporting.
Every read takes the same window and scope options, and leaves out what you do not pass so the API applies its own default:
:workspace_id— narrow to one workspace:account_id— narrow to one account:days— a rolling window, or use:fromand:to(bothYYYY-MM-DD):limit,:page— where the endpoint paginates:sort,:label— where the endpoint ranks or groups
For example:
{:ok, overview} = FoPost.Analytics.overview(client, workspace_id: id, days: 30)
overview.total_followers
Summary
Functions
Pulls fresh numbers from the platforms.
Same as collect/2, but raises FoPost.Error.
An audience breakdown.
Same as demographics/2, but raises FoPost.Error.
A per-label campaign roll-up.
Same as labels/2, but raises FoPost.Error.
The headline numbers for the window.
Same as overview/2, but raises FoPost.Error.
A year of posting activity, one entry per day.
Same as posting_streak/2, but raises FoPost.Error.
Posts with their per-platform delivery breakdown, paginated.
Same as posts_table/2, but raises FoPost.Error.
One point per day in the window.
Same as time_series/2, but raises FoPost.Error.
The best performing posts in the window. sort: "recent" orders by date instead.
Same as top_posts/2, but raises FoPost.Error.
Functions
@spec collect( FoPost.Client.t(), keyword() ) :: {:ok, FoPost.Analytics.CollectSummary.t()} | {:error, FoPost.Error.t()}
Pulls fresh numbers from the platforms.
Rate limited harder than the reads, since every call reaches out to a network. Narrow
it with :account_id.
Same as collect/2, but raises FoPost.Error.
@spec demographics( FoPost.Client.t(), keyword() ) :: {:ok, FoPost.Analytics.Demographics.t()} | {:error, FoPost.Error.t()}
An audience breakdown.
:audience is "followers" (the default), "engaged", or "reached".
Same as demographics/2, but raises FoPost.Error.
@spec labels( FoPost.Client.t(), keyword() ) :: {:ok, [FoPost.Analytics.LabelStats.t()]} | {:error, FoPost.Error.t()}
A per-label campaign roll-up.
Same as labels/2, but raises FoPost.Error.
@spec overview( FoPost.Client.t(), keyword() ) :: {:ok, FoPost.Analytics.Overview.t()} | {:error, FoPost.Error.t()}
The headline numbers for the window.
Same as overview/2, but raises FoPost.Error.
@spec posting_streak( FoPost.Client.t(), keyword() ) :: {:ok, [FoPost.Analytics.StreakDay.t()]} | {:error, FoPost.Error.t()}
A year of posting activity, one entry per day.
Same as posting_streak/2, but raises FoPost.Error.
@spec posts_table( FoPost.Client.t(), keyword() ) :: {:ok, FoPost.Analytics.PostsTable.t()} | {:error, FoPost.Error.t()}
Posts with their per-platform delivery breakdown, paginated.
Same as posts_table/2, but raises FoPost.Error.
@spec time_series( FoPost.Client.t(), keyword() ) :: {:ok, FoPost.Analytics.TimeSeries.t()} | {:error, FoPost.Error.t()}
One point per day in the window.
Same as time_series/2, but raises FoPost.Error.
@spec top_posts( FoPost.Client.t(), keyword() ) :: {:ok, [FoPost.Analytics.TopPost.t()]} | {:error, FoPost.Error.t()}
The best performing posts in the window. sort: "recent" orders by date instead.
Same as top_posts/2, but raises FoPost.Error.