> ## Documentation Index
> Fetch the complete documentation index at: https://thestacc.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Advertising Compliance & Validation

> If your business advertises in a regulated profession (for example healthcare, law, mortgage, real estate, or contracting), theStacc can check your Local…

If your business advertises in a regulated profession (for example healthcare, law, mortgage, real estate, or contracting), theStacc can check your Local SEO content against advertising-compliance rules **before** it goes live. This page explains exactly what gets checked, what blocks a publish, and where the result is recorded.

> This is an optional, opt-in feature. If you have not turned on a compliance profile for your project, nothing on this page applies and your posts and review replies publish exactly as they always have. See **Compliance Profiles** under Content SEO at [/docs/content-seo/compliance-profiles](/docs/content-seo/compliance-profiles) to learn how to enable and configure it.

## What gets checked

When a project has a compliance profile enabled, two Local SEO surfaces are validated right before they publish:

* **Google Business Profile posts** (both when you publish manually and when auto-publish runs on schedule)
* **Review replies** posted to Google Business Profile

Both surfaces are short and length-constrained (a GBP post or a 2 to 4 sentence review reply cannot carry a full legal disclaimer), so theStacc runs a **short-form** version of the same compliance engine used for your blog content. This keeps the focus on the substance of what you can and cannot say, rather than forcing a license number or full disclaimer footer into a place it does not fit.

The check looks at four things:

### 1. Violations

These are things your rule pack says you must **never** say in advertising for your profession. theStacc detects them three ways:

* **Exact phrase matches** against a blocklist of prohibited terms.
* **Pattern matches** for prohibited phrasing (for example a stated rate that must always be accompanied by an APR disclosure).
* **A judgment check** for the cases a simple keyword search cannot catch, such as fabricated testimonials, prohibited guarantees, unsubstantiated claims, or protected health information. This runs as a single, fast classification pass. It only decides "does this rule fire, yes or no" - it never rewrites your content. When it is genuinely unsure, it is built to err on the side of flagging for a human to look at.

### 2. Missing required insertions

Some rule packs require specific disclosures (for example a firm name or a license number). On these short surfaces, required disclosures live at the **profile or bio level**, not stuffed into every post, so a missing disclosure is **recorded** but does **not** by itself stop a short post from publishing. The substantive prohibitions above are what gate a short post.

### 3. Severity

Every check rolls up to one overall severity:

* **none** - nothing fired. Safe to publish.
* **hold\_for\_review** - something needs a human to look at it before it goes out.
* **block** - a hard violation that must not publish.

When more than one issue is found, the strictest one wins (block outranks hold-for-review outranks none).

### 4. Never-autopilot

Some rule packs (for example certain attorney-advertising rules in specific states) forbid auto-publishing advertising at all. When a project's rules include one of these, the content is flagged **never-autopilot**. This flag holds the publish regardless of whether any other violation fired.

## What blocks a publish

The gate policy is simple and the same for GBP posts and review replies:

**A publish is stopped whenever the result is `block`, `hold_for_review`, or `never-autopilot`.**

When that happens:

* The content is **not** posted to Google Business Profile.
* The **reason is recorded** on the item so you can see why. A GBP post is marked as failed to publish, with the reason saved in its publish error. A review reply has the reason saved in its response publish error.
* If you triggered the publish from the app, you get a clear message back explaining the hold instead of a silent success.

### There is no override here

Unlike long-form blog content (where a held draft can be reviewed and approved by a person), **Local SEO has no override path**. A held or blocked GBP post or review reply cannot be force-published. To get it out, you **edit the content to resolve the issue and publish again**. The corrected version is re-checked from scratch.

### Auto-publish (scheduled posts)

When the daily auto-publish job runs, there is no person in the loop to clear a hold. So for scheduled GBP posts, **block, hold-for-review, and never-autopilot all stop the post the same way** - it is marked failed-to-publish with the recorded reason and skipped. You can then open it, fix it, and publish manually.

## What happens if the check itself errors

theStacc is deliberately careful here, because the worst outcome would be shipping unreviewed regulated advertising.

* **The check is fail-closed.** If theStacc cannot load your compliance profile, or the validation errors part-way through, the content is **held for review** rather than published. A check that could not run is never treated as a pass.
* **One narrow fail-open case:** if the shared compliance engine itself is unavailable in the environment (an infrastructure-level problem that would affect every project equally, not a signal about your specific content), the publish proceeds as it normally would. This prevents a platform-wide outage from silently blocking everyone, while still failing closed on anything that is actually about your content or your profile.

Projects **without** a compliance profile are always a no-op - they are never held by this gate.

## The audit trail

Every time the gate evaluates a Google Business Profile post - whether it passes, holds, or blocks - theStacc records a compliance check on the post for your records. That record includes:

* The **rule-pack versions** that were applied (so you can show exactly which version of which rules ran).
* The **violations** that fired.
* Which required disclosures were supplied automatically and which were still missing.
* The **result**: passed or not, the severity, the review level, and the never-autopilot flag.
* A **timestamp** of when the check ran.

This is your "we assisted, the rules were applied, here is what happened" evidence trail. Because review replies are stored more simply, they do not carry this full record - for a held reply, the reason is saved directly on the review's response publish error field instead.

## How this fits together

* To turn compliance on, choose your profession and jurisdictions, and enter your firm name and license numbers, see **Compliance Profiles** at [/docs/content-seo/compliance-profiles](/docs/content-seo/compliance-profiles).
* To work with review replies, see [/docs/local-seo/reviews](/docs/local-seo/reviews).
* To work with Google Business Profile posts, see [/docs/local-seo/google-business-profile](/docs/local-seo/google-business-profile).

If a post or reply is held and you are not sure why, open it and read the recorded reason - it names the specific rule that fired. Edit the content to address it, then publish again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.