Plausible
Let hires read your website analytics in Plausible, on Plausible Cloud or your own server.
Explore 2 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.
With Plausible, a hire can:
- read a site's headline numbers for a period: visitors, visits, pageviews, views per visit, bounce rate and visit duration,
- break any metric down by page, source, channel, UTM tag, country, device, goal, custom property, or by day, week or month for a trend, with filters and an order.
Hires only read: nothing they do changes anything in Plausible, whichever access you give them.
1. Make a Stats API key in Plausible
Straight there: plausible.io/settings/api-keys, or /settings/api-keys on your own Plausible.
- In Plausible, open Account settings → API keys and click New API key.
- Choose Stats API, name it
Rosterand create it. Copy the key: Plausible shows it once.
2. Connect it in Roster
- Open Integrations → Tools → Add a tool, search for Plausible and choose it.
- Stats API key: paste it.
- Plausible address: leave
https://plausible.iofor Plausible Cloud, or give the address of your own Plausible. - Click Connect.
Roster checks the key when you click Connect. Once it's accepted, the connection shows Connected as Plausible and the address it's at. If it's refused, Roster says what to fix (a mistyped key, a missing permission) and saves nothing.
3. Give hires access
On the hire's Tools tab, click Give access on Plausible:
- Sites: the site domains it may read, as they're named in Plausible, one per line. Any other site is refused. Leave it empty for every site the key can read.
What hires get back
A breakdown returns at most 50 rows unless the hire asks for up to 200, with a note when there are
more. Plausible keeps no personal data about visitors; if a site sends an email address as a custom
property, hires see [email] instead.
If something goes wrong
- "Site not found": check the site's domain as it's named in Plausible, and that the key's team owns it.
- Too many requests: Plausible allows 600 requests an hour per key; Roster spaces requests out and waits when asked to.
Tools and permissions reference
This reference is built from the same definitions Roster uses to connect Plausible and give hires access. It updates with each release.
Authentication and requested permissions
The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.
API key or access token
In Plausible: Account settings → API keys → New API key → Stats API.
No fixed permission list is declared for this connection. Review the sign-in consent screen, the account's roles, and the service's own documentation before connecting.
Connection fields
| Field | What to provide |
|---|---|
Stats API keytokenRequired · sealed secret | In Plausible: Account settings → API keys → New API key → Stats API. |
Plausible addressurlOptional | https://plausible.io for Plausible Cloud, or the address of your own Plausible. Starts with: |
Per-hire limits
Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.
| Field | What to provide |
|---|---|
SitessitesOptional | Site domains as they're named in Plausible, one per line. Leave empty for every site the key can read. |
Actions
2 actions: 2 only read and 0 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.
2 of 2 actions. Open an action for its arguments and full input schema.
site_overviewRead only
A site's headline numbers for a period: unique visitors, visits, pageviews, views per visit, bounce rate and average visit duration.
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
siteRequired | string | the site's domain, as named in Plausible |
periodOptional | "day" | "24h" | "7d" | "28d" | "30d" | "91d" | "month" | "6mo" | "12mo" | "year" | "all" | a period ending now (default 30d); or give from and to |
fromOptional | string | first day, YYYY-MM-DD (with to) |
toOptional | string | last day, YYYY-MM-DD (with from) |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"site": {
"type": "string",
"minLength": 1,
"maxLength": 253,
"description": "the site's domain, as named in Plausible"
},
"period": {
"description": "a period ending now (default 30d); or give from and to",
"type": "string",
"enum": [
"day",
"24h",
"7d",
"28d",
"30d",
"91d",
"month",
"6mo",
"12mo",
"year",
"all"
]
},
"from": {
"description": "first day, YYYY-MM-DD (with to)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"to": {
"description": "last day, YYYY-MM-DD (with from)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"required": [
"site"
]
}query_statsRead only
Metrics for a site broken down by dimensions (pages, sources, countries, goals, UTM tags, devices, custom properties, or time for a trend), with filters and an order. Example: metrics [visitors, conversion_rate], dimensions [visit:source], filters [{dimension: event:goal, operator: is, values: [Signup]}].
Approval: Uses your workspace and hire approval settings.
| Argument | Type | Details |
|---|---|---|
siteRequired | string | the site's domain, as named in Plausible |
metricsRequired | "visitors" | "visits" | "pageviews" | "views_per_visit" | "bounce_rate" | "visit_duration" | "events" | "scroll_depth" | "percentage" | "conversion_rate" | "group_conversion_rate" | "average_revenue" | "total_revenue" | "time_on_page"[] | See input schema below. |
dimensionsOptional | string[] | See input schema below.Default: [] |
filtersOptional | object[] | See input schema below.Default: [] |
order_byOptional | object[] | a metric or one of the dimensions; default: the first metric, highest first |
periodOptional | "day" | "24h" | "7d" | "28d" | "30d" | "91d" | "month" | "6mo" | "12mo" | "year" | "all" | a period ending now (default 30d); or give from and to |
fromOptional | string | first day, YYYY-MM-DD (with to) |
toOptional | string | last day, YYYY-MM-DD (with from) |
limitOptional | integer | See input schema below.Default: 50 |
Full input schema (JSON)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"site": {
"type": "string",
"minLength": 1,
"maxLength": 253,
"description": "the site's domain, as named in Plausible"
},
"metrics": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"type": "string",
"enum": [
"visitors",
"visits",
"pageviews",
"views_per_visit",
"bounce_rate",
"visit_duration",
"events",
"scroll_depth",
"percentage",
"conversion_rate",
"group_conversion_rate",
"average_revenue",
"total_revenue",
"time_on_page"
]
}
},
"dimensions": {
"default": [],
"maxItems": 3,
"type": "array",
"items": {
"type": "string"
}
},
"filters": {
"default": [],
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"dimension": {
"type": "string"
},
"operator": {
"type": "string",
"enum": [
"is",
"is_not",
"contains",
"contains_not",
"matches",
"matches_not"
]
},
"values": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
}
},
"required": [
"dimension",
"operator",
"values"
]
}
},
"order_by": {
"description": "a metric or one of the dimensions; default: the first metric, highest first",
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"by": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"direction": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
},
"required": [
"by",
"direction"
]
}
},
"period": {
"description": "a period ending now (default 30d); or give from and to",
"type": "string",
"enum": [
"day",
"24h",
"7d",
"28d",
"30d",
"91d",
"month",
"6mo",
"12mo",
"year",
"all"
]
},
"from": {
"description": "first day, YYYY-MM-DD (with to)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"to": {
"description": "last day, YYYY-MM-DD (with from)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"limit": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"site",
"metrics"
]
}Watches and incoming events
- No built-in watch is declared. Give a hire a scheduled responsibility if it should check this service regularly.
- No incoming webhook handler is declared for this integration.
Limits and troubleshooting
- Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
- Expired or revoked access: reconnect or replace the key on the connection.
- Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
- The action schema describes accepted inputs. It does not grant additional access or bypass approvals.