# Reports and charts

> The read-only MCP tools to see how the community is doing and turn it into a chart or table in the conversation — sales, subscriptions and MRR, active members, engagement and the leaderboard, the engagement statement, visits and purchase funnel, who is online, events, courses, one member's activity and the month's dashboard — with ready-made recipes.

Ask the assistant how sales are going, who takes part the most or what one person did, and it answers with numbers and, if you want, with a chart or a table right in the conversation (in Claude, as an artifact). The tools on this page only read: none of them changes anything in the community.

## In short

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| [`sales_report`](#sales-report) | Sales by day, week or month, by plan, product or payment method, and the total since the first sale | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`subscriptions_report`](#subscriptions-report) | MRR, new and canceled subscriptions, churn, courtesies and downsell | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`members_report`](#members-report) | New, active and inactive members, by group and by tag | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`engagement_report`](#engagement-report) | Posts, comments, reactions, the most engaged, unanswered posts and the engagement points | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`events_report`](#events-report) | Events and how many answered going, maybe and not going | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`courses_report`](#courses-report) | Enrollments, completions and progress per course | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`member_activity`](#member-activity) | What one person did: counts, engagement points and links | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`community_overview`](#community-overview) | This month against last month, in one call | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_dashboard`](#get-dashboard) | The community's day: indicators, pending actions, moderation and money | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_engagement_activities`](#list-engagement-activities) | The engagement statement: who did what, when and where, line by line | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`analytics_report`](#analytics-report) | Visits, pages, spaces, traffic sources, the purchase funnel and the most read content | Admin (finance, only the funnel) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_post_metrics`](#get-post-metrics) | Reads, expansions, clicks and most clicked domains of a post | Author or admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_online_now`](#get-online-now) | Who is in the app right now, by page, space and checkout step | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |

**Who sees what.** Money (sales and subscriptions) belongs to the owner, the admin and **finance**. Visits and traffic belong to the owner and the admin; finance sees only the purchase funnel. The most read content belongs to the owner and the admin, and a post's reads also to its author. Community (members, engagement, events and courses) belongs to the owner, the admin and the **moderator**. One specific person's activity is for the owner and the admin only. In `community_overview`, each role sees only its own area's block: finance sees the money, the moderator sees the community.

## How answers arrive

Every answer is ready to become a chart:

| Part | What it is |
|---|---|
| `series` | One row per period (`period`), with that period's numbers. Periods with nothing show up as zero, so the chart never skips a month |
| `totals` | The sum of the requested range |
| `currency` | The currency of the amounts (one per query; by default, the one the community sells the most in) |
| `timezone` | The time zone used to count days |

Common parameters:

| Parameter | Values | Default |
|---|---|---|
| `interval` | `day` (day), `week` (week, starting Monday) or `month` (month) | `month` |
| `from`, `to` | `YYYY-MM-DD` dates, inclusive. They are widened to the start and end of the period: with `month`, March 15 becomes March 1 | 30 days, 12 weeks or 12 months up to today |
| `timezone` | A time zone such as `America/New_York` | The time zone of the community's country |

A query covers at most 366 days, 156 weeks or 120 months. For a longer period, use a larger interval.

**What each number means:**

- **Sales** come from the [statement](/pagamentos/saldo-e-extrato): the report's net is the statement's net for the same period. The only fee shown is the [platform fee](/pagamentos/taxa-da-plataforma), which is independent of the payment method.
- **MRR** is monthly recurring revenue: each paying subscription converted to a month (a yearly one divided by 12). Courtesies and subscriptions in trial are left out.
- **Active** is anyone who did at least one thing in the period: posted, commented, reacted, answered an event (going or maybe), enrolled in or studied a course, or earned engagement points (which includes the daily login, when engagement is on). Only reading does not count, because views are not recorded.
- **Event attendance** does not exist: Memberfy keeps each person's answer (going, maybe, not going), not who showed up. The report says so (`attendanceTracked: false`).

## `sales_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Sales report.** Per period: gross, platform fee, installment interest, net, number of sales, average ticket, refunds and chargebacks (separately), and the net after them. It also brings payouts requested and completed, and the total since the first sale. *Minimum role: admin or finance.*

Parameters: the common ones, plus `group_by` (`product`, `plan`, `payment_method` or `product_type`) and `currency`.

**Returns:** `series`, `totals`, `allTime`, `payouts` and, with `group_by`, `groups`: each plan, product or payment method with its own series. A sale that belongs to no plan falls in the group with no name.

**Ask like this:** *"How much have I earned in total since I started selling?"*

**Next:** the response suggests, in `next_steps`, the same report for the period right before, with the dates filled in, to compare. See [Next steps](/mcp/ferramentas#next-steps).

## `subscriptions_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Subscriptions report.** Per period: MRR, paying subscriptions, new, canceled, churn (the share of those active at the start of the period that canceled), in trial and courtesies. *Minimum role: admin or finance.*

Parameters: the common ones, plus `currency`.

**Returns:** `series`, `totals`, today's snapshot in `current` (MRR, ARR, by status, how many end with their period, past due, courtesies), `byPlan` and `downsell` (last-chance offers shown and accepted).

**Ask like this:** *"How did MRR evolve this year? What was each month's churn?"*

> [!NOTE]
> History is rebuilt from each subscription's start and end dates. A past-due spell that was resolved, or a pause, leaves no date, so it only shows in today's snapshot.

## `members_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Members report.** Per period: how many joined, how many were active, the total at the end of the period and the inactive ones. *Minimum role: moderator or finance.*

Parameters: the common ones.

**Returns:** `series`, `totals`, `current` (total, active and inactive over the last 30 days, by role), `byGroup` and `byTag`.

**Ask like this:** *"How many new members did we get per week last quarter, and how many were active?"*

## `engagement_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Engagement and engagement report.** Per period: feed posts, content, comments, reactions, active members and engagement points. It also shows where the conversation happens, who took part the most, the posts nobody answered and the data the [engagement](/espacos/ranking) is built from. *Minimum role: moderator or finance.*

Parameters: the common ones, plus `order_by` (`points`, `interactions`, `posts`, `comments` or `reactions`; `points` by default when engagement is on), `page` and `limit` (up to 100).

**Returns:** `series`, `totals`, `bySpace`, `members` (paginated: posts, comments, reactions, interactions, points in the period and today's level), `unansweredPosts` and `ranking` (the point rules, points per action and per period, and how many members are at each level).

It also brings `compare`, the previous period of the same length with the change in each number, and `compare_summary`, the same comparison in one sentence in your language (*"Compared with September 1 to 30: active members +12%, comments −5%…"*), to answer *"did we grow?"*. The response suggests the [statement](#list-engagement-activities) for the same period.

**Ask like this:** *"Who are this month's 10 most engaged members? And which actions earned the most points?"* · *"Did engagement grow compared with last month?"*

## `events_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Events report.** Per period: the events held and the answers received. Per event: how many said going, maybe and not going, with the link. *Minimum role: moderator or finance.*

Parameters: the common ones, plus `page` and `limit`.

**Returns:** `series`, `totals` and `events`. Attendance is not recorded, and the assistant says so if you ask who showed up.

**Ask like this:** *"How many people confirmed for each event this semester?"*

## `courses_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Courses report.** Per period: enrollments, completed courses and completed lessons. Per course: enrollments, completions, completion rate and the average progress of those enrolled. *Minimum role: moderator or finance.*

Parameters: the common ones, plus `page` and `limit`.

**Returns:** `series`, `totals` and `courses`, with each course's link.

**Ask like this:** *"Which course has the lowest completion rate?"*

`averageRating` and `ratingsCount`, the average and the number of lesson ratings of each course.

## `member_activity`

<span class="tool-kind tool-kind-read">Read-only</span>

**One member's activity.** What a person did in the community, in the period and ever: posts, comments, reactions, event answers, enrollments, purchases, subscriptions, completed courses and certificates. It brings the engagement points per action, the level and the position, and recent items with links. *Minimum role: admin.*

Parameters: `member` (the profile id, from `list_members`, the e-mail or the profile link copied from the app) and the common ones. For a timeline of everything the person did, with date and time, use [`list_activity_logs`](/mcp/ferramentas-membros#list-activity-logs).

**Returns:** `counts`, `ranking` and `recent`. For purchases, only the amount paid and the payment method. There is no browsing log: the report shows what the person did, not what they saw.

**Ask like this:** *"What has maria.silva@memberfy.net done in the community over the last 3 months?"*

## `community_overview`

<span class="tool-kind tool-kind-read">Read-only</span>

**Community dashboard.** This month so far against all of last month and against last month up to the same day: revenue and MRR, new members, engagement and the events of the next 30 days. *Minimum role: moderator or finance; each sees its own area's block.*

Parameters: `timezone`.

**Returns:** `money` (for owner, admin and finance) and `community` (for owner, admin and moderator). In `money_by_currency`, one line per currency the community sold in: the month's gross and net revenue and that currency's balance (available, pending, retained and, if any, owed). To know when the pending money is released, `get_balance`.

**Ask like this:** *"How is this month going compared with the last one?"*

## `get_dashboard`

<span class="tool-kind tool-kind-read">Read-only</span>

**The community's day.** The same summary as the [Dashboard](/membros/dashboard) screen, in one call: the 4 indicators with the comparison to the previous week, the pending actions by urgency, the total of items awaiting moderation with the 5 most recent, today's bookings, visitors, presence and parcels, the week's engagement and, for those who see money, today's sales and the new and canceled subscriptions. Each block only comes when the community has the module. *Minimum role: moderator or finance.*

No parameters. The result is kept for about 30 seconds.

**Returns:** the summary's blocks and `generated_at_readable`, the generation time in the community's time zone. The `money` block comes **only** for owner, admin and finance: for the moderator the key doesn't exist. A member gets the permission error. To decide a moderation item, the assistant uses `moderate_item` and `list_moderation_queue`, with the same confirmations as the queue.

**Ask like this:** *"How is the community today?"*

## `list_engagement_activities`

<span class="tool-kind tool-kind-read">Read-only</span>

**Engagement statement.** Who did what, when and where, one line per activity, newest first, private spaces included: the same statement as the [Engagement](/membros/engajamento) page. *Minimum role: moderator or finance (the team).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `from`, `to` | date YYYY-MM-DD | No | The period, in the community time zone, both ends included. Default: the last 30 days; at most 366 |
| `profile` | profile id, e-mail, name or app link | No | Only this person. A name works when only one person has it |
| `kind` | list: `post`, `article`, `comment`, `reaction`, `event`, `enrollment`, `lesson`, `classified`, `gallery`, `event_created`, `attendance`, `login` | No | Only these kinds of activity |
| `space_id` | id | No | Only this space (from `list_spaces`) |
| `cursor`, `limit` | text, number | No | The next page (`pagination.nextCursor`) and lines per page (default 50, up to 100) |

**Returns:** each activity with the date, the kind, the person, the space, the item (with title and link, or empty if it was deleted) and the engagement points. A like received doesn't count (it isn't something the person did), and points have no line of their own. There is no total: while `pagination.hasMore` is true, there are more pages. `page_url` is the Engagement page, which exports the same statement as CSV.

**Ask like this:** *"What did Maria do this week?"* · *"Who commented in the Announcements space yesterday?"*

## `analytics_report`

<span class="tool-kind tool-kind-read">Read-only</span>

**Community analytics.** The human traffic to the community's app, by view: the same numbers as the [Analytics](/membros/analytics) page. *Minimum role: owner or admin; finance reads only the funnel.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `view` | `overview`, `pageviews`, `funnel`, `funnel_members`, `content` | No | The view. Default: `overview` (for finance, `funnel`) |
| `from`, `to` | date YYYY-MM-DD | No | The period, in the community time zone. Default: the last 30 days; at most 366 |
| `group_by` | `page`, `space`, `day` | No | Only in `pageviews`. Default: `page` |
| `product_ids` | list of ids | No | In `funnel` and `funnel_members`: only these products or plans (up to 100). `product_id` (a single one) is still accepted |
| `step` | `visit`, `catalog`, `product`, `checkout_identify`, `checkout_payment`, `checkout_submitted`, `checkout_success` | In `funnel_members` | The furthest step the person reached |
| `page` | number | No | In `funnel_members`: the page (default 1) |
| `search` | text | No | In `funnel_members`: part of the name or email |
| `limit` | number | No | Lines per list (in `content`, up to 50; default 10); in `funnel_members`, members per page (default 20, up to 100) |

- **`overview`**: pageviews, visits, sessions, member and anonymous visits and the average time on page, against the previous period; the daily series; the most viewed spaces and pages; where they come from (sites, UTM campaigns, countries, devices); and bots apart (search engines and AI assistants).
- **`pageviews`**: by page, by space or by day (with days without visits at zero).
- **`funnel`**: the page's seven steps, visits → catalog → product → started the purchase → payment → order submitted → paid, with the rate of each step, in total and per product. Visits are always for the whole community, even with `product_ids`. It comes with `step_labels` (each step's name in the asker's language) and `funnel_notes`, the sentences the assistant repeats: since when there is data, how many went straight to a product and the orders outside the funnel (no visit in the app: direct link, assistant or API).
- **`content`**: the period's [most read content](/membros/analytics#most-read-content), for the owner and the admin only (finance is refused). Posts sorted by reads, then expansions and clicks, each with the title, the space, the link in the app, the reads, expansions, clicks and the 3 most clicked domains. It comes with `content_note`, the sentence the assistant repeats: counting started at the launch, and anything before that isn't included.
- **`funnel_members`**: the members who stopped at a step (anonymous visitors only count in the funnel; up to the last 30 days), most recently seen first, 20 per page, with `page`, `search` and pagination; the total counts everyone who stopped there.

**Visits are not unique people.** "Visits" is the sum of each day's unique visitors: the same person on three days counts three times. The assistant says "visits", never "unique people", for a period longer than one day. The same goes for the reads, expansions and clicks of `content`: each counts one person per day. No view brings money.

**Ask like this:** *"How many visits did we get this month, and where did they come from?"* · *"Where do people give up on checkout?"* · *"Who stopped at payment for the Mentorship? Look for Maria."* · *"Which spaces are viewed the most?"* · *"Which posts were most read this month?"*

## `get_post_metrics`

<span class="tool-kind tool-kind-read">Read-only</span>

**A post's reads.** The numbers of the [Reads of this post](/espacos/conteudo#reads-of-this-post) box: how many people read it, expanded **…see more** and clicked its links, and the most clicked domains. *Who can: the owner and the admin, for any post; the author, for their own post. Anyone else is refused.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `post` | text | Yes | The post: the id, the app link or the title. By title, when more than one post matches, the answer lists the options (`matches`, with id, title and space) and the assistant asks which one |
| `from`, `to` | date YYYY-MM-DD | No | The period, in the community's time zone, both days included. Default: from publication to today |

**Returns:** the post (title, type, space, section and the link in the app), the **reads** (opened the post page), the **expansions** (opened **…see more**), the **clicks** (clicked a link in the post) and the 5 most clicked domains, with `content_note`. Each number counts one person per day: the assistant says "reads", never "unique readers". Of a clicked link, only the domain is kept; clicks inside an embedded player (YouTube, Spotify) don't count. Counting started at the launch.

**Ask like this:** *"How many clicks did the 'Welcome' post get?"* · *"Which sites did people open from post X?"* · *"How has my post done since I published it?"*

## `get_online_now`

<span class="tool-kind tool-kind-read">Read-only</span>

**Online now.** Who is in the community's app at this moment, like Google Analytics' real-time view. *Minimum role: owner or admin.*

Parameters: `minutes` (the real-time window, from 1 to 30; default 30).

**Returns:** the visitors in the last 2 minutes (one person with two tabs counts once), members and anonymous, by space; and, in the requested window, the active ones minute by minute and where they are: by page, space, checkout step, country and device. If the live counter is off, the response says so, instead of showing zeros.

**Ask like this:** *"How many people are in the community right now?"*

## Recipes

### Revenue chart per month per plan

**For:** owner, admin or finance.

> Make a stacked bar chart of net revenue month by month in 2026, one color per plan, and below it a table with each plan's total and average ticket.

| # | Tool | What it does |
|---|---|---|
| 1 | `sales_report` | `interval: month`, `from: 2026-01-01`, `to: 2026-12-31`, `group_by: plan` |

**Result:** the chart and the table in the conversation. Each plan in `groups` already comes with the full series, with zero in months without sales. To see refunds too, ask *"and a line with the refunds"*.

### Who the 10 most engaged are

**For:** owner, admin, moderator or finance.

> Who were the 10 most engaged members over the last 30 days? Show them in a table with posts, comments, reactions, points and level, and tell me which actions earned the most points.

| # | Tool | What it does |
|---|---|---|
| 1 | `engagement_report` | `interval: day`, `limit: 10`, `order_by: points` |

**Result:** the table with the top 10 and a summary of `ranking.byAction`. With engagement off, ask for `order_by: interactions`. To see one person from the list in detail, follow up with `member_activity`.

### The week's summary

**For:** any team role. Finance gets only the money part; the moderator, only the community part.

> Write the week's summary: sales and new subscriptions, new members, who took part the most, the posts left unanswered and the upcoming events with how many confirmed. End with three suggestions of what to do.

| # | Tool | What it does |
|---|---|---|
| 1 | `community_overview` | The month so far, for context |
| 2 | `sales_report` | `interval: day`, the last 7 days |
| 3 | `engagement_report` | `interval: day`, the last 7 days, `limit: 5` |
| 4 | `events_report` | From next week on |

**Result:** the summary in the conversation. If you want to publish it, ask *"write a Feed post with this and show me first"*: the assistant uses `create_post` after your ok.

### How is the community today?

**For whom:** owner, admin, moderator or finance. The moderator doesn't get the money part.

> How is the community today? Tell me first what needs my attention, then the week's numbers against the previous one.

| # | Tool | What it does |
|---|---|---|
| 1 | `get_dashboard` | The day's summary: indicators, pending actions, moderation, bookings, visitors and money |
| 2 | `moderate_item` | Only if you ask to approve or reject what is waiting |

**Result:** a short summary in the conversation, with what is urgent on top and the week's changes. To go deeper on a point, the assistant follows with `sales_report` or `engagement_report`.

## Related

- [Tools](/mcp/ferramentas)
- [Recipes](/mcp/receitas)
- [Tools · Finance](/mcp/ferramentas-financeiro)
- [Security and limits](/mcp/seguranca)
