Every feature exists for one reason: to catch compliance issues before the platform catches you.
Most campaigns get an instant answer because the rules are clear. When creative copy is ambiguous or a category is borderline, Lawspeaker digs deeper and returns the same clear outcome so you always know what to do.
// Known category: instant lookup
POST /v1/verdict
categories: ["alcohol"]
platforms: ["google"]
-> PASS (12ms)
// Ambiguous creative: deeper analysis
POST /v1/verdict
creative_text: "Lightweight
refreshment..."
-> WARN
"implies beverage, may
trigger alcohol policy"Five platforms get full rule-by-rule coverage: every category, every restriction, every certification requirement. Three more inherit from their parent platforms. If a policy can block your campaign, it is covered.
| Platform | Tier | Rules |
|---|---|---|
| Google Ads | T1 | 24 |
| Meta | T1 | 19 |
| TikTok | T1 | 17 |
| Amazon Ads | T1 | 12 |
| ChatGPT Ads | T1 | 8 |
| DV360 | T2 | - |
| GAM | T2 | - |
| Simpli.fi | T2 | - |
POST your campaign details to /v1/verdict and get back a clear pass, warn, or block with links to the exact policy page behind each finding. No SDKs to install, no HTML to parse.
{
"platform": "google",
"jurisdiction": "US-CA",
"category": "alcohol",
"creative_text": "Lightweight refreshment",
"targeting": { "age_min": 21 }
}
-> 200 OK
{
"verdict": "warn",
"findings": [{
"rule": "alcohol-creative-ambiguity",
"severity": "warn",
"citation": "google/policies/alcohol#creative",
"note": "Creative implies beverage;
may trigger alcohol policy"
}]
}Every check is logged to a tamper-evident audit trail. When a regulator, client, or internal reviewer asks whether a campaign was checked and what the result was, you have the answer months later.
{
"verdict_id": "vd_8f3a2b1c",
"timestamp": "2026-08-10T14:32:00Z",
"verdict": "warn",
"platform": "google",
"jurisdiction": "US-CA",
"user_id": "usr_abc123"
}We monitor policy changes across all 8 platforms continuously. When a policy changes, the rules are updated and any campaigns that might be affected are flagged. You never have to read a policy page yourself.
// Webhook: policy.updated
{
"event": "policy.updated",
"platform": "tiktok",
"category": "alcohol",
"changed_fields": ["age_restriction"],
"old_value": "25+",
"new_value": "21+",
"effective_date": "2026-08-15",
"affected_campaigns": 3
}When an insertion order is amended, Lawspeaker re-checks only the changed fields and flags any new issues the amendment introduces. No more manually diffing amended IOs to see if a budget or targeting change broke compliance.
// IO amended: MDM-2026-008841
{
"amendment": "AMD-001",
"changed_fields": ["budget", "targeting.age_min"],
"compliance_delta": {
"budget": "no impact",
"targeting.age_min": {
"old": 18, "new": 16,
"verdict": "block",
"rule": "alcohol-age-targeting",
"note": "Age targeting below 21
for alcohol category"
}
}
}Get 50 free checks per month. No credit card required.
Get started free