The workhorse analytics tool: pivot-table aggregation over the connected PublisherChamp account's sales, royalties, KU reads, and ad spend. Use it for ANY aggregation question (earnings, units sold, pages read, spending — by book, author, series, marketplace, platform, format, or time period). Available dimensions (nestable, outermost first): title, asin, author, series, marketplace, platform, book_format, book_tag, year, quarter, month, year_month, date, published_date, attribution_campaign, attribution_ad_group, attribution_campaign_ad_group, facebook_campaign, facebook_ad_group, facebook_ad, facebook_ad_id, facebook_ad_account, journal_event. Available measures: paperbacks, paperbacks_royalty, expanded_distribution, expanded_distribution_royalty, hardcovers, hardcovers_royalty, ebooks_paid, ebooks_paid_royalty, ebooks_free, audiobooks, audiobooks_royalty, reads, full_reads, reads_royalty, all_stars_bonus, other_royalty, gross_royalties, royalty_per_unit, amz_spending, fb_spending, bookbub_spending, external_expenses, spending, total_ad_sales, amazon_attribution_orders, amazon_attribution_borrows, amazon_attribution_total_units_sold, amazon_attribution_click_throughs, amazon_attribution_detail_page_view_clicks, amazon_attribution_add_to_cart_clicks, amazon_attribution_conversion_rate, amazon_attribution_cost_per_sale, amazon_attribution_book_royalties, amazon_attribution_read_royalties, amazon_attribution_total_royalties, amazon_attribution_roas, amazon_attribution_net_sales, ad_impressions, ad_clicks, amazon_ad_impressions, amazon_ad_clicks, facebook_ad_impressions, facebook_ad_clicks, bookbub_ad_impressions, bookbub_ad_clicks, ad_orders, ad_kenp_reads, amazon_ad_kenp_reads, amazon_attribution_kenp_reads, estimated_ad_kenp_royalties, cpc, amazon_cpc, facebook_cpc, bookbub_cpc, ctr, amazon_ctr, facebook_ctr, bookbub_ctr, cpm, amazon_cpm, facebook_cpm, bookbub_cpm, cost_per_ad_order, ad_conversion_rate, acos, tacos, inorganic_orders_percentage, net_royalties, total_paid_units, sell_through, read_through, listen_through, royalties_per_reader, rpr_contribution, roi, roas, number_in_series, bsr, journal_events. NEVER guess or calculate the current date. For requests using relative language, leave start_date and end_date empty and set date_range to the matching server-resolved value (for example today, yesterday, this_week, or this_month). PublisherChamp resolves it in the account timezone and returns the authoritative current and resolved dates in date_context. Use concrete YYYY-MM-DD start_date/end_date only when the user supplied an explicit calendar range. The default range is the current month to date. Money is in the account's preferred currency unless `currency` is set — the response states the currency used. For Sell-Through, `include_free_units` defaults to true to match the Power Table's default; set it to false to exclude free ebooks. This setting does not affect Read-Through, and neither calculation adds Borrows to Sell-Through. Listen-Through uses only audiobook units, skips series positions without an audiobook edition, and is an aggregate progression estimate rather than verified completion. For Facebook-ad attribution analysis, request attribution_campaign_ad_group with the Facebook dimensions and the canonical Amazon Attribution measures. Use amazon_attribution_total_royalties for book plus attributed read royalties; use amazon_attribution_book_royalties and amazon_attribution_read_royalties for the breakdown. Read royalties use Amazon's reported value or the same KENP-rate estimate as Attribution data. These values belong to the tag and can repeat across linked ads: never sum Facebook-ad rows; use one row per attribution tag for totals. Pagination is capped at 200 rows per page; the response includes overall totals, per-row values, is_complete, and next_page. When the user asks for all data, a complete dataset, or equivalent, retrieve pages sequentially using the same arguments except page until is_complete=true. Never stop after a response with is_complete=false, and do not sum the repeated overall totals across pages. For a complete multi-dimensional breakdown such as 'sales by country and pen name', set result_shape='flat': every requested dimension combination is returned as a row in one paginated query, so do not issue separate calls for each dimension or group. Omitting result_shape automatically uses flat for an initial query. Do not pass parent_path with an explicitly flat shape. To drill into one nested group, set result_shape='nested' and pass parent_path=[{"dimension": ..., "key": ...}] using row keys from a previous response. Shared-access account scope is chosen per request with selected_accounts. If the response status is account_selection_required, do not guess or run analytics yet: tell the user the exact aliases/emails in account_scope.available_accounts and ask whether to use all accounts or specific ones. Retry with selected_accounts=['all'] or the user's exact choices. When account_scope contains one account, the tool selects it automatically. Call this tool with schema_only=true before account-specific queries to discover custom book-format measure keys and the exact available/custom platform names accepted by the platform dimension and selected_platforms filter. Only one performance query runs per connected account at a time. If the response status is busy, wait retry_after_seconds and retry once; never issue parallel performance-table calls for the same account. Validation errors come back as {"error": ...} with instructions — read them and correct the request. Use list_books or list_series first when you need to resolve a user's phrase into exact titles or series to filter on.
query_performance_table