# Run a raw TikTok report for a bespoke question

> Tier: recipe. Operating recipe: real tool sequence, core rules, known traps.

The raw reporting endpoint, validated then run: TikTok's escape hatch.

**Intent.** The exact table the packaged reads do not provide.

## When to use

- Bespoke dimensions or metrics.
- Async heavy pulls.

## When not to use

- When a packaged tool answers it already.

## Sources

Required: TikTok Ads

## Preconditions

- The account is ticked in the dashboard, confirmed via list_accounts.

## Inputs

- `window`: Analysis window. Default: last 30 days.

## Procedure

1. Validate the query shape. — tools: `tiktok_validate_query`
2. Run the report, async when the window is wide. — tools: `tiktok_get_report_raw`, `tiktok_get_async_report_status`

## Decision rules

- **When** The window exceeds sync limits → **conclude** Go async and poll: a truncated sync read is silent data loss.

## Evidence requirements

- Every figure carries its account, metric and window.
- Anything below a readable sample size is reported as unjudged, not as zero.

## Human approval boundary

- The readout changes nothing. Any change it motivates goes through Safe Writes: preview, human confirmation, then apply.

## Failure modes

- Metric availability varies by dimension combination: validation exists because the API's own errors arrive late.

## Output

- **Readout**: The figures, with windows and accounts named.
- **Flags**: What deserves a deeper skill or a human decision.
