Widget data source types
Widget data source types
Thedatasource_type field on a widget accepts:DATASOURCE · CALCULATION · CUSTOM_DATA · CUSTOM_IMPORT · GOALSDeprecated metrics flagged
Deprecated metrics are flagged, not renamed
When a vendor retires a metric, it is now marked with adeprecated flag in the metric catalog rather than having (Deprecated) appended to its name. In the report builder these metrics render in red with an explanatory tooltip, and they remain selectable so existing widgets continue to resolve.The change removes a long-standing annoyance: the old suffix was copied into a widget’s saved metric label at the moment it was picked, so every deprecation round left stale labels behind in saved reports. The flag lives only in the catalog, so it can never go out of date.Applied across Ahrefs, Facebook Pages, Google Analytics 4, Google Ads, Google Business Profile, Google Local Services Ads, Instagram, Instagram Ads, Keywords, Salesforce, Shopify, Twitter Ads, WooCommerce, and YouTube. No metrics were added or removed.Facebook post reach fixed
Facebook post reach returns data again
Post-level reach was still requesting a field Meta has retired, which returned0 for every post. It now uses Meta’s current unique-viewers field. Affected widgets recover on their next refresh — no reconfiguration needed.Preview column sorting & search
Sorting and search fixed for preview columns
Table columns that render a rich preview — ad creatives, social posts — carry a structured value rather than plain text. Sorting and searching those columns compared the underlying object instead of its text, so every row looked identical: sorting did nothing and search matched everything or nothing.These columns now sort and search on the text shown in the cell. Period comparison on the same columns matches rows by the entity’s identifier, so each row is compared against its own previous-period value instead of all rows collapsing onto the first.Comparison display modes
Choose how comparison data appears
When a comparison period is active, you can now choose what each row or data point shows. A Comparison Display setting under Display offers:- Previous Value — the raw figure from the previous period (the default)
- Percentage Change — the change against the previous period
- Both — the previous value and the percentage change side by side
comparison_display field on a widget, accepting previous, change, or both. Widgets without it continue to show the previous value.Period comparison alignment
Period comparison matches the correct category
Comparison figures now line up with the category they belong to for dimensions such as channel, country, page, and campaign — including on widgets that are sorted or limited to a set number of rows. Date-based comparisons are unaffected.Per-metric display settings
Metric Settings — rename, format, and set comparison direction
A new Metric Settings panel under Display gives each metric in a widget its own overrides, in a collapsible row per metric:- Name — a custom label that replaces the metric’s default name
- Format — how the value renders (numeric, decimal, percentage, currency, time)
- Comparison Indicator — whether a rise is good or bad for that metric
Dashboard widget limit enforced on duplicate
Dashboard widget limit applies to duplication
Dashboards are capped at 50 widgets. The cap was enforced when saving widgets but not when duplicating them, so a direct API or MCP call could push a dashboard past the limit. Duplicating beyond the cap now returns:Table search toggle
Show or hide the table search box
Table widgets accept a newshow_search boolean on create and update, exposed in the builder under Display. It defaults to enabled, so existing widgets are unchanged.Heading colour in themes
Headings can be coloured independently
Themes gain an optionalheading_text token, edited as Headings in the theme editor’s colour section. It controls the colour of title widgets. When unset, headings continue to follow the general text colour, so existing themes render exactly as before.More MCP tools
New MCP tools
The MCP server now exposes the rest of the workspace to AI agents. New tool groups:- Goals —
goals_list,goals_create,goals_update,goals_delete,goals_duplicate - Calculated metrics —
calculated_metrics_list,_create,_update,_delete,_duplicate - Custom data —
custom_data_list,_get,_create,_update,_delete,_duplicate - PDF —
pdf_generate,pdf_status; Exports —exports_list,exports_delete - Email —
email_send, senders / templates / sending-domains CRUD, andemail_provider_get/_set - API keys —
api_keys_list,api_keys_create,api_keys_revoke - Notifications —
notifications_list,notifications_unread_count,notifications_mark_read, and more - Archive —
archive_list,archive_counts,archive_restore - Activity —
activity_list - Billing —
billing_get,billing_invoices(read-only; plan changes stay in-app)
Stricter input validation
Enumerated fields are now validated
Request fields with a fixed set of options now reject anything outside that set (a clear400 instead of silently storing a bad value), and every enumerated field shares one definition across the REST API and the MCP tools so they can’t drift. Highlights:- Sort & filter params —
sort_by/orderon list endpoints,source(all/standard/mine) on templates and assets, and thedatasourcesfilter (each id must be a real data source). - Automations —
frequency,time_format, and the reportdate_textpreset. - Projects —
type,orientation,paper_size,branding_source, andauto_refresh_interval_hours(hourly or daily). - Goals & calculated metrics —
operator,goal_type, and the displayformat(Numeric / Decimal / Percentage / Currency). - Media — upload
content_typeis restricted to image types. - Onboarding & company — client-count band and
country(from the country list). - Timezones — every
timezonefield is validated as a real IANA zone.