Roivenue
Ask your marketing data
- Category
- Pending
- Primary Subcategory
- Pending
Integration details
Description
Roivenue helps users analyze marketing performance and attribution, explore customer journeys, check data-source health, and answer product questions from official documentation. It can also create private dashboards and custom dimensions in the user's Roivenue account when explicitly requested.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Category
- Pending
- Primary Subcategory
- Pending
- Secondary Subcategories
- None listed
- Brand
- Unknown
- Access
- Account required
- First tracked
- 2026-09-17
- Tool count
- 24
- Geography
- US
The broad Category that contains the Primary Subcategory.
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competitive lineup
24 tools agents can invoke
The account's markets (data partitions) with each one's reporting currency and data coverage. A multi-market account returns one row per currency from query_performance — use this to label each row in its market's currency (never compare across currencies) and to sanity-check date ranges against actual coverage. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
account_markets
Start here once an account is chosen. One call that orients you to the account: its name, the queryable catalog (measures, dimensions, attribution model `code`s, scope dimensions, default metric) and connector health. Use the codes it returns to plan list_dimension_values / query_performance. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
account_overview
The Explorer **Path analysis** overlap (Venn) widget: how often a `dimension`'s values co-occur in the same converting paths over [date_from, date_to]. Give a `dimension` (a conversionPaths dimension code such as platformName) and 2-3 `values` — the endpoint is exponential in the value count, so it caps at 3. Take candidate values from list_dimension_values, but they must match EXACTLY as they appear in paths (that tool reads the `performance` dataset by default). Returns {dimension, values, subsets:[{sets, size}] one per non-empty subset, insights:[...]} where an insight reads like "12.3% of 'Google Ads' paths also contain 'Facebook Business'". `attribution_model` takes a model **code** from describe_metrics, never a display name (the AI Data Driven code varies by account: 'RnnProbability' or 'aiDataDriven') — and must be MULTI-TOUCH: under last-touch every path collapses to one touchpoint and path metrics are degenerate. An empty result carries a `note` — follow it. Money is EUR-pinned. Scope with `filters` like [{"name": "platformName", "values": ["Google Ads"]}] (optional "operator": in|notIn|contains|notContains; contains takes one "value"). Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
path_overlap
Report an account's data-source (connector) health: per-connector-type source counts (active/inactive), each type's data-coverage window, failing sources with their last error message, and an auth-expiry hint. Use this to explain data gaps — missing spend, untracked conversions, a channel showing zero — from connector status instead of guessing. For per-job refresh timestamps and error drill-down use data_freshness. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
connector_health
The per-touchpoint journey behind ONE conversion/order: pass `conversion_id` = a pathConversionId from transaction_history verbatim — often a string like 'OBJ26113784'; never strip the prefix. Returns touchpoints in time order (keys are dataset column codes; customer-/email-identifying columns are removed); a no-match id returns empty touchpoints plus a `note`. Takes NO dates or filters by design — it looks the conversion up across all time. `attribution_model` takes a model **code**, never a display name. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
conversion_detail
CREATE a custom (derived) dimension with rules in the user's roivenue account — ONLY on an explicit ask, after preview_custom_dimension was shown to the user. Needs the Operator role (clear 403 otherwise). Triggers a data recalculation up to a year back — always relay recompute_note and explorer_url. Args as in preview_custom_dimension (minus dates). Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
create_custom_dimension
CREATE a custom dashboard in the user's Explorer app — ONLY on an explicit ask (it writes to their account; private to them until shared; the app may notify them). Widgets (max 12): 'kpi-card' {metric}; 'dimension-main-chart'|'dimension-pie-chart'|'dimension-horizontal-bar-chart' {metric, dimension}; 'dimension-table' {metrics (1-2), dimension}; other widget types must be added in the app. Metric/dimension/attribution take **codes** from describe_metrics — unknown values are REJECTED (the API would store a silently blank tile); near-misses auto-correct, echoed in `resolved`. Windows are RELATIVE so the dashboard stays current: from_type ('last'|'this'|'previous'), period ('day'|'week'|'month'|'quarter'|'year'), multiplicand, granularity ('daily'|'weekly'|'monthly'); omit window/attribution_model/granularity for the caller's Explorer defaults (echoed in `defaults_applied`). Filters as in query_performance; layout is automatic. Returns {id, url, widgets} — give the user the url as a Markdown link. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
create_dashboard
The Explorer **Path analysis** page's path table — which converting journeys drive conversions for an account over [date_from, date_to], grouped by a dimension. `group_by` is a conversionPaths dimension code (e.g. platformName) labelling each touchpoint. `measures` default [conversions, conversionPathLength, netRevenue]: pass PRIMARY measure codes only (conversions, netRevenue, grossProfit, visits, impressions) plus the pseudo-measure `conversionPathLength` (not in the catalog); derived ratio measures (conversionRate, averageOrderValue, romi) ERROR here; max 4. Returns {rows, total_row_count, aggregates}, each row a path in touch order. `limit` default 20, max 50, page with `offset`; sort via `sort_by` (measure code or conversionPathLength) + `sort_dir`; `journey_contains` keeps only paths containing that value. `attribution_model` takes a model **code** from describe_metrics, never a display name (the AI Data Driven code varies by account: 'RnnProbability' or 'aiDataDriven') — and must be MULTI-TOUCH: under last-touch every path collapses to one touchpoint and path metrics are degenerate. An empty result carries a `note` — follow it. `currency` defaults EUR. Scope with `filters` like [{"name": "platformName", "values": ["Google Ads"]}] (optional "operator": in|notIn|contains|notContains; contains takes one "value"). Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
path_journeys
Per-pipeline data freshness for the account: one row per ETL job with status (notRun/waiting/processing/completed/failed/canceled), last_completed_at (the 'data last refreshed' timestamp), the unfinished-data window (missing since), and the last error message. Use for 'when was my data last refreshed?' / 'why is a source stale?'. Narrow with connector_type or only_problems=true; `limit` default 100 (max 200, `_truncated` sentinel when more exist). Pass `etl_job_id` (from a row) to drill into that job's last error — returns the exception message plus an error_mitigation_message fix hint (quote it to the user); raw stack traces are never returned. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
data_freshness
The queryable catalog: measures, dimensions, attribution models, and default metric for the account (account_overview wraps this for a one-call orientation). Each attribution model includes its `code` — pass that code (not the display name) to query_performance. `scope_dimensions` flags dimensions (e.g. site) that materially scope a result; use list_dimension_values to see their values. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
describe_metrics
List the roivenue accounts this connection can access, as [{id, name}]. Call this when no account is pinned by server config: present the options and ask the user which account to explore, then pass the chosen id as `account_id` to the other analyst tools. If an account is pinned server-side you don't need this — the tools use it directly. In answers and citations name accounts by NAME — ids are internal.
list_accounts
List the distinct values of a dimension for the account (e.g. the sites in `site`), ranked by `measure` (default netRevenue) over [date_from, date_to]. Use this to enumerate scope options (sites, markets, conversion types) before querying or before asking the user to choose. Omitted attribution_model defaults to the user's Explorer model; without one, attributed measures sum across EVERY model and read ~Nx high. Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
list_dimension_values
Load focused guidance for the kind of task you are about to do, and follow it. Call this BEFORE answering when the question matches one of the skills — path-analysis (customer-journey / touchpoint-path questions, channel overlap, order drill-in), reconciling-numbers (the user's figure disagrees with yours), attribution-and-dimensions (zero revenue with non-zero cost, or a name that could live under several dimensions), budget-reallocation (where to shift spend), data-health (stale or broken-looking data), charts (an explicit chart request). Needs no account or token. Most questions need no skill at all.
get_skill
Call this FIRST, before your first data answer, to mirror the calling user's Explorer defaults: their selected attribution model, currency, default date window (as an object plus human-readable text) and time granularity, and the accounts they can reach. Compute data answers with these defaults so the numbers match what the user sees in the Explorer app — and say so when you do. Works with no account selected (it is about the user, not an account); `account_id` is optional and used only to resolve the attribution model to its canonical code. Name accounts by NAME in answers, never ids.
my_settings
Build a deep link that opens a roivenue Explorer page with a chosen scope — give the user a clickable follow-up after a data answer. `page` is one of: performance (Performance analysis), dimension-breakdown (Dimension breakdown; takes `dimension`), path-analysis (takes `dimension` for the journeys table), attribution-analysis (takes `dimension`), transaction-history, budget-optimizer, dashboard. Optionally scope with account_id, date_from/date_to (+ `granularity`: daily|weekly|monthly|aggregate, default daily), `attribution_model` (a model **code**, e.g. from account_overview — never a display name) and `filters` like [{"name": "site", "values": ["kytary.cz"]}] — the page opens exactly as if the user had picked those in the app. Pure URL building — needs no token; a server-pinned account wins over account_id. Returns {url, note}: present the url as a Markdown link, e.g. [Open in Explorer](url). Call this BEFORE you start writing the answer, so the answer is written once, whole, after the last tool call.
explorer_link
The Explorer **Path analysis** page's KPIs for an account over [date_from, date_to]: average path length, average days to convert, the share of conversions the attribution model redistributes away from last-touch, and the touchpoint-type mix (amount plus a 0-1 share). `attribution_model` takes a model **code** from describe_metrics, never a display name (the AI Data Driven code varies by account: 'RnnProbability' or 'aiDataDriven') — and must be MULTI-TOUCH: under last-touch every path collapses to one touchpoint and path metrics are degenerate. An empty result carries a `note` — follow it. Money is EUR-pinned. `Visit` is the effective click+visit bucket (the ETL remaps clicks to Visit, so Click is ~0). `exclude_stitched_paths` defaults **true** to match the app's fresh-open view; set it false to include cross-device-stitched journeys (which raises the redistribution share). include_impressions / include_synthetic_impressions add those buckets and raise the totals. Scope with `filters` like [{"name": "platformName", "values": ["Google Ads"]}] (optional "operator": in|notIn|contains|notContains; contains takes one "value"). Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
path_kpis
A distribution histogram from the Explorer **Path analysis** page for an account over [date_from, date_to]. `kind`: 'days_to_convert' (first touch to conversion) or 'touchpoints_to_convert' (touchpoints per converting path). Returns {kind, bins:[{title, amount, share}]}. Bins are FIXED server-side — days: 1, 2, 3-7, 8-15, 16-30, 31+; touchpoints: 1, 2, 3, 4, 5-10, 10+ — custom bins are not possible. `attribution_model` takes a model **code** from describe_metrics, never a display name (the AI Data Driven code varies by account: 'RnnProbability' or 'aiDataDriven') — and must be MULTI-TOUCH: under last-touch every path collapses to one touchpoint and path metrics are degenerate. An empty result carries a `note` — follow it. Money is EUR-pinned. Takes no toggles. Scope with `filters` like [{"name": "platformName", "values": ["Google Ads"]}] (optional "operator": in|notIn|contains|notContains; contains takes one "value"). Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
path_histogram
Validate and DRY-RUN a draft custom (derived) dimension on live data — nothing is written. Invalid drafts are REJECTED with the valid options; returns per-value coverage vs the 'Undefined' bucket, rule conflicts, and sample rows. `when` = OR-list of AND-groups; operators: contains|startsWith|endsWith|equals|regex|in|notIn|isEmpty|isNotEmpty|not-variants|greaterThan|lowerThan|greaterOrEqualTo|lowerOrEqualTo (case-INSENSITIVE; only equals honors case). `then.type`: constant|other_dimension|expression|regex_group. Conflicting rows: preview shows the LAST matching rule, production keeps the FIRST. Run this and show coverage/conflicts before create_custom_dimension. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
preview_custom_dimension
Query an account's marketing performance: aggregate `measures` by `group_by` dimensions over [date_from, date_to] (ISO-8601). Use describe_metrics for valid codes; pass attribution model **codes** (e.g. 'LastTouch') in attribution_models. Scope with filters shaped like [{"name": "site", "values": ["<a site value>"]}]. Leave `granularity` unset for a single total per group — it defaults to 'aggregate'; the API's own default is per-DAY rows, so only set granularity to 'Daily'/'Weekly'/'Monthly' when you actually want a time series; 'Weekly'/'Monthly' cover whole weeks/months, so the window is widened to those boundaries for you and the widening reported in a `_window_snapped` row — report THAT window, and don't retry with hand-trimmed dates. A Daily/Weekly/Monthly series returns up to 400 rows in one call — never chunk a year of days into multiple queries. A `_suspect` row means the result is the wrong-dimension/wrong-attribution signature, NOT real numbers: re-check before reporting it. Omitted `currency` defaults to the user's Explorer currency, converting a multi-market account to that single currency exactly like the app (per-market native-currency rows appear only if no default currency is available); use account_markets to see each market's own currency. Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
query_performance
Read the full text of a knowledge/ doc by its path (as returned by search_knowledge). Only paths under knowledge/ are served. Always cite the path in a 'Sources:' line.
read_doc
Resolve ANY relative window ('year to date', 'last 13 weeks', 'previous month', 'this quarter') to the EXACT dates the Explorer app's date picker would show — use this instead of computing dates yourself. Pass a `preset` (one of: this_week, previous_week, last_7_days, last_14_days, last_30_days, previous_3_months, previous_month, last_month, this_month, this_quarter, year_to_date (alias this_year), previous_year, last_13_weeks) OR the explicit triple `from_type` ('this'|'last'|'previous') + `period` (day|week|month|quarter|year) + `multiplicand` (default 1); the preset can also be a dynamic triple pattern like 'last_5_days', 'previous_2_weeks', etc. Today is always excluded, so day/aggregate windows end yesterday; `granularity` (aggregate|daily|weekly|monthly, default aggregate) snaps the range to whole weeks/months exactly like the app (a weekly year-to-date starts in the prior year and can extend past yesterday). Pass granularity = the user's defaultTimeGranularity (from my_settings) to mirror their app page — path tools consume the page's snapped range — or leave 'aggregate' for plain totals. `first_day_of_week` defaults to monday (the account default). Needs no account or token — pure date math. Returns {date_from, date_to, conceptual, granularity, note} (plus 'resolved' if preset was dynamically parsed).
resolve_date_range
Search roivenue's knowledge base. Returns matches as {path, excerpt}; cite the paths in a 'Sources:' line. If the list is empty, answer starting with 'NO_SOURCE:'. Use this before answering any roivenue question; never answer from outside knowledge.
search_knowledge
Record the user's feedback on Rai's most recent answer. Call this whenever the user reacts to an answer — e.g. 'that's wrong', 'that helped', 'this response was really bad'. Use rating 'up' or 'down' and include the comment plus the question/answer being rated so the record is actionable. After recording, acknowledge briefly; if negative feedback is vague, ask one short follow-up question and record the detail with another submit_feedback call.
submit_feedback
The Explorer Transaction-history page's order/conversion list for an account over [date_from, date_to]: one row per conversion — {pathConversionId, timestamp, orderStatus?, netRevenue, grossProfit?}. Customer identifiers are never returned (say so if asked); orderStatus/grossProfit exist only on OMS-enabled accounts. Sort with sort_by (pathConversionId|timestamp|orderStatus|netRevenue|grossProfit) + sort_dir; page with limit (default 20, max 50) + offset — a `_truncated` sentinel flags more rows. Pass a row's pathConversionId to conversion_detail for that order's touchpoint journey. `attribution_model` takes a model **code**, never a display name. An `orderStatus` filter matches the page's own column filter server-side — use this tool, not query_performance, for order counts. Scope with `filters` like [{"name": "platformName", "values": ["Google Ads"]}] (optional "operator": in|notIn|contains|notContains; contains takes one "value"). Relative windows ('last 7 days', 'year to date') exclude today and end YESTERDAY; get exact app-matching dates from `resolve_date_range` instead of computing them. Omit dates/attribution/currency to use the caller's Explorer defaults; `defaults_applied` echoes what was used — disclose it. Pass `account_id` (from list_accounts) unless the server pins one; a pin always wins.
transaction_history
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.