# Influencer #ad Disclosure Checker: FTC & ASA (`ultimatemc/influencer-ad-disclosure-checker`) Actor

Check influencer captions and video descriptions for missing or unclear #ad disclosures under FTC Endorsement Guides, the ASA/CAP 2026 influencer guide and CMA, plus German and French rules. Flags codes, affiliate links and gifted posts without a clear upfront label, with quote, rule link and fix.

- **URL**: https://apify.com/ultimatemc/influencer-ad-disclosure-checker.md
- **Developed by:** [Ultimate Foresight Inc](https://apify.com/ultimatemc) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Influencer Ad Disclosure Checker** scans influencer captions, video descriptions and scripts for **missing, unclear or hidden ad disclosures** under the **US FTC Endorsement Guides** (16 CFR Part 255), the **UK ASA/CAP influencer guide** (4th edition, October 2026) and **CMA** guidance, plus **German** (Medienanstalten) and **French** (Law 2023-451) labelling rules. It spots discount codes, affiliate links, gifted products, "in partnership with" and other brand-relationship clues, then checks whether a **clear label** like **#ad** sits **upfront**. Each finding has the **exact quote**, a **risk level per country**, a **link to the rule** and a **suggested fix**. Click **Start** with the prefilled example to check three captions in a few seconds.

> **Text pre-check only. Not legal advice.** The tool reads the text you give it. It cannot see images, video, audio, stickers or platform toggles (unless you pass the paid-partnership flag), and it never says a post is "compliant". A flag means "review this post".

### What does the Influencer Ad Disclosure Checker do?

- ✅ Finds **commercial signals**: discount codes ("use code SARAH20"), affiliate links (amzn.to, rstyle.me, liketk.it, shopmy.us, geni.us, Awin, CJ, Impact, Skimlinks and `?ref=` links), "thanks @brand for sending", gifted/PR products, "in partnership with @brand", ambassador statements and paid-partnership flags from scrapers.
- ✅ Finds **labels** and rates them per country: `#ad`, `Ad |`, `Advertisement`, `Sponsored`, `#paidpartnership`, `#gifted`, `#affiliate`, `#collab`, `#sp`, `#spon`, `#partner`, `Werbung`/`Anzeige`, `Publicité`/`Collaboration commerciale`, and the 2026 ASA list of labels to avoid.
- ✅ Checks **placement**: a label after the first ~125 characters (hidden behind "more") or buried in a cluster of hashtags is flagged. In Germany it checks that "Werbung" or "Anzeige" comes first.
- ✅ Flags **"not sponsored" next to affiliate links or codes**, and posts where you say the relationship is paid/gifted/affiliate but the text has no label.
- ✅ Adds the French **"Images retouchées / Images virtuelles"** reminder when a French post mentions filters or AI images.
- ✅ Ignores common false friends: dress code, QR code, source code, "AD 1200", adidas, "Ad-free", "gift ideas", "thanks to my mom" and more. In our tests on 1,400+ harmless texts (Wikipedia intros in English, German and French, plus product and job texts), the only flags were 2 encyclopedia sentences saying "sponsored by".
- ✅ Takes plain texts, post objects, or a whole **Apify dataset** from an Instagram, TikTok, YouTube or X scraper. Captions, post URLs, platform and paid-partnership flags are detected automatically.

**Risk levels:** `high`, `medium`, `low`, `none` overall, plus `riskByJurisdiction` and `disclosureStatus` for each country you choose (`us`, `uk`, `de`, `fr`).

### Who is it for?

- **Brands and in-house social teams** checking creator posts before or after a campaign goes live.
- **Influencer marketing agencies and platforms** auditing hundreds of posts for a client report.
- **Creators and managers** who want a quick check that `#ad` is in the right place and worded for each country.
- **Compliance and legal teams** who want a fast first pass with rule links, before human review.

### How to check influencer posts for #ad disclosure

1. Click **Start** with the prefilled example to see the output.
2. Paste your own captions into **Captions / post texts to check**, or add **Posts** with your own IDs, platform and known relationship.
3. Or pick the **dataset** of an Instagram, TikTok or YouTube scraper run. Leave **Dataset fields** empty to auto-detect the caption.
4. Choose the **rules** (US, UK, Germany, France). If you know the posts are paid, set **Brand relationship** to "Paid post" so unlabeled posts are flagged even without clues in the text.
5. Download as JSON, CSV or Excel and work through the rows sorted by `riskLevel`.

### Input example

```json
{
  "texts": [
    "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
    "#gifted these cosy slippers from @warmtoes and I never want to take them off",
    "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy."
  ],
  "jurisdictions": [
    "us",
    "uk"
  ],
  "relationship": "unknown",
  "visibleChars": 125,
  "onlyFlagged": false
}
```

### Output example

Real output from the prefill run on 2026-10-24 (shortened; every finding has full references and suggestions):

```json
[
  {
    "itemNo": 1,
    "ref": null,
    "platform": null,
    "textPreview": "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
    "riskLevel": "high",
    "riskByJurisdiction": {
      "us": "high",
      "uk": "high"
    },
    "jurisdictionsApplied": [
      "us",
      "uk"
    ],
    "languageHint": null,
    "disclosureStatus": {
      "us": "missing_label",
      "uk": "missing_label"
    },
    "commercialSignals": [
      {
        "type": "discountCode",
        "strength": "strong",
        "quote": "Use code SARAH20"
      }
    ],
    "labelsFound": [],
    "notSponsoredStatements": [],
    "issueCount": 1,
    "issues": [
      {
        "ruleId": "missing_disclosure",
        "severity": "high",
        "severityByJurisdiction": {
          "us": "high",
          "uk": "high"
        },
        "quote": "Use code SARAH20",
        "explanation": "Commercial signal found (discountCode) but no ad label in the text.",
        "references": [
          {
            "jurisdiction": "us",
            "title": "FTC Endorsement Guides 16 CFR 255.5: disclose material connections clearly and conspicuously",
            "url": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-255/section-255.5"
          },
          {
            "jurisdiction": "us",
            "title": "16 CFR 255.0(f): definition of 'clearly and conspicuously' (unavoidable on social media)",
            "url": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-255/section-255.0"
          },
          {
            "jurisdiction": "us",
            "title": "FTC Disclosures 101 for Social Media Influencers (labels to use and avoid, placement)",
            "url": "https://www.ftc.gov/business-guidance/resources/disclosures-101-social-media-influencers"
          },
          {
            "jurisdiction": "uk",
            "title": "ASA/CAP Influencers' guide to making clear that ads are ads (4th ed., Oct 2026: labels to use and avoid)",
            "url": "https://www.asa.org.uk/resource/influencers-guide.html"
          },
          {
            "jurisdiction": "uk",
            "title": "CAP Code section 2 (rule 2.1/2.3: marketing communications must be obviously identifiable)",
            "url": "https://www.asa.org.uk/type/non_broadcast/code_section/02.html"
          },
          {
            "jurisdiction": "uk",
            "title": "CMA guide for content creators: social media endorsements (DMCC Act 2024)",
            "url": "https://www.gov.uk/government/publications/social-media-endorsements-guide-for-influencers"
          }
        ],
        "suggestion": {
          "us": "Put a clear label such as 'Ad', '#ad', 'Advertisement' or 'Sponsored' (or 'Thanks to [Brand] for the free product') at the start of the caption, and also say it in the video.",
          "uk": "Put 'Ad' / '#ad' (or 'Advert', 'Advertisement', 'Advertisement feature') at the very start, before anything else; don't rely on 'gifted', 'sponsored', 'affiliate', 'collab' or 'in partnership with'."
        }
      }
    ],
    "notes": [],
    "relationshipInput": "unknown",
    "checkedAt": "2026-10-24T18:16:17+00:00",
    "disclaimer": "Automated wording pre-check of the text only, based on publi..."
  },
  {
    "itemNo": 2,
    "textPreview": "#gifted these cosy slippers from @warmtoes and I never want to take them off",
    "riskLevel": "high",
    "riskByJurisdiction": {
      "us": "medium",
      "uk": "high"
    },
    "disclosureStatus": {
      "us": "weak_label",
      "uk": "unclear_label"
    },
    "labelsFound": [
      {
        "label": "gifted",
        "quote": "#gifted",
        "position": 0,
        "inHashtagCluster": false,
        "strength": {
          "us": "weak",
          "uk": "insufficient"
        }
      }
    ],
    "issues": [
      {
        "ruleId": "unclear_label",
        "severityByJurisdiction": {
          "uk": "high"
        },
        "quote": "#gifted",
        "explanation": "Label '#gifted' found, but: The ASA's 2026 guide now advises against 'Gift/Gifted' and 'PR' labels: research shows people don't understand them. Use 'Ad'.",
        "suggestion": {
          "uk": "Put 'Ad' / '#ad' (or 'Advert', 'Advertisement', 'Advertisement feature') at the very start, before anything else; don't rely on 'gifted', 'sponsored', 'affiliate', 'collab' or 'in partnership with'."
        }
      },
      {
        "ruleId": "weak_label",
        "severityByJurisdiction": {
          "us": "medium"
        },
        "quote": "#gifted",
        "explanation": "Label '#gifted' found, but: FTC: 'Thanks to [brand] for the free product' is often enough if hard to miss; a bare 'gifted' tag is easy to miss or misread.",
        "suggestion": {
          "us": "Put a clear label such as 'Ad', '#ad', 'Advertisement' or 'Sponsored' (or 'Thanks to [Brand] for the free product') at the start of the caption, and also say it in the video."
        }
      }
    ]
  },
  {
    "itemNo": 3,
    "textPreview": "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy.",
    "riskLevel": "none",
    "riskByJurisdiction": {
      "us": "none",
      "uk": "none"
    },
    "disclosureStatus": {
      "us": "clear_label_upfront",
      "uk": "clear_label_upfront"
    },
    "labelsFound": [
      {
        "label": "ad",
        "quote": "Ad",
        "position": 0,
        "inHashtagCluster": false,
        "strength": {
          "us": "clear",
          "uk": "clear"
        }
      }
    ],
    "issues": []
  }
]
```

### How much does it cost to check influencer posts?

Pay per result: **$0.005 per post checked**, plus a $0.00005 start fee per run and small Apify platform usage paid by you (the 3-post prefill run used about $0.0001 of platform usage). 100 posts cost about $0.50 and 1,000 posts about $5.00, plus platform usage. Turn on **Only save posts with findings** to pay only for flagged rows, and cap spend with the maximum cost per run setting.

### Use it through the API, integrations or AI agents

- Run and get results in one call: `https://api.apify.com/v2/acts/ultimatemc~influencer-ad-disclosure-checker/run-sync-get-dataset-items`
- MCP for AI agents: `https://mcp.apify.com?tools=ultimatemc/influencer-ad-disclosure-checker`
- Chain it after a scraper: pass that run's dataset ID, or call it from a webhook when the scraper finishes.

### Rules and sources

Checked against these public texts on 2026-10-24:

- [FTC Endorsement Guides, 16 CFR 255.5](https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-255/section-255.5) (disclosing material connections) and [255.0(f)](https://www.ecfr.gov/current/title-16/chapter-I/subchapter-B/part-255/section-255.0) ("clearly and conspicuously", unavoidable on social media).
- [FTC Disclosures 101 for Social Media Influencers](https://www.ftc.gov/business-guidance/resources/disclosures-101-social-media-influencers): put the label where it's hard to miss, not in a pile of hashtags or behind "more"; "sp", "spon", "collab", "thanks" or "ambassador" alone are unclear; say it in the video too.
- [ASA/CAP Influencers' guide to making clear that ads are ads](https://www.asa.org.uk/resource/influencers-guide.html), 4th edition (October 2026): use "Ad", "#ad", "Advert", "Advertising", "Advertisement" or "Advertisement feature" upfront; avoid "gifted", "affiliate", "collab", "PR", "sponsored", "spon", "sp", "in partnership with", "thanks to", "supported by" and similar. Affiliate links and posts about your own products count as ads.
- [CAP Code section 2](https://www.asa.org.uk/type/non_broadcast/code_section/02.html) (ads must be obviously identifiable) and the [CMA guide for content creators](https://www.gov.uk/government/publications/social-media-endorsements-guide-for-influencers).
- Germany: [Die Medienanstalten, Leitfaden Werbekennzeichnung bei Online-Medien](https://www.die-medienanstalten.de/fileadmin/user_upload/die_medienanstalten/Service/Merkblaetter_Leitfaeden/Leitfaden_Werbekennzeichnung_Online-Medien_interaktiv.pdf): "Werbung" or "Anzeige" at the start; "ad", "sponsored by" or "PR-Sample" alone are not enough.
- France: [Loi n° 2023-451 du 9 juin 2023](https://www.legifrance.gouv.fr/loda/id/JORFTEXT000047663185) (influence commerciale), art. 5 ("Publicité" or "Collaboration commerciale", clear and visible for the whole content) and art. 5-2 ("Images retouchées" / "Images virtuelles").

### How the checking works

The text is matched against a fixed rule set of labels, commercial signals and exclusions for false friends. Each label has a strength per country (clear, weak or not enough), and each finding has a severity per country. Placement is measured in characters from the start of the text and by detecting clusters of three or more hashtags. With language detection on, German and French rules only apply to German or French text. No AI and no external calls, so the same input always gives the same output.

### FAQ

#### Does "none" mean the post is compliant?

No. It means the text has no commercial clues, or it has a clear upfront label. The tool can't see the relationship behind a post, the image, the video or what is said out loud. If you know a post is paid, set **Brand relationship** so missing labels are always flagged.

#### Why is "#sponsored" flagged for the UK but not the US?

The FTC lists "sponsored" as a clear label. The ASA's 2026 guide advises against "sponsored" and wants "Ad" or "Advert" instead. That's why results are split by country.

#### What about Instagram's "Paid partnership" tag?

If your scraper output has a field like `isPaidPartnership` or `isSponsored`, the tool uses it. The ASA says the platform tag alone may not be enough; the FTC says it may not be sufficient on its own either, so a text label is still suggested.

#### Can it check TikTok or YouTube videos?

It checks the caption, description or script text you give it. For videos it reminds you that the disclosure should also be said or shown in the video.

#### Is it AI?

No. Deterministic rules, so results are repeatable and auditable.

### Limitations

- Text only. Labels in images, stickers, video, audio or platform toggles are not seen unless passed as a flag.
- It can't know the real relationship behind a post; clues like codes and affiliate links are strong hints, not proof.
- English, German and French wording; other languages are not checked.
- Not every country is covered. Rules and guides change; check the dates in the sources section.

### Other tools by Ultimate Foresight

- [Ad Copy Policy Checker for Meta, Google & TikTok](https://apify.com/ultimatemc/ad-copy-policy-checker): checks ad text against Facebook, Instagram, Google Ads and TikTok ad policies before you submit.
- [H-1B Visa Sponsor Checker & Score for Job Listings](https://apify.com/ultimatemc/h1b-visa-sponsor-score): adds Department of Labor H-1B sponsorship history and a 0-100 score to company names or job listings.
- [Chain vs Independent Labeler for Google Maps Leads](https://apify.com/ultimatemc/chain-vs-independent-labeler): labels local businesses as chain, franchise or independent.
- [YouTube Monetization Checker for Scripts & Titles](https://apify.com/ultimatemc/youtube-script-monetization-checker): pre-checks titles, descriptions and scripts for wording that leads to limited or no ads.
- [Etsy & eBay Listing Policy & Banned Item Checker](https://apify.com/ultimatemc/etsy-ebay-listing-policy-checker): pre-checks marketplace listings for prohibited items, counterfeit wording and off-platform contact.
- [Job Scam Detector & Trust Score for Job Postings](https://apify.com/ultimatemc/job-posting-trust-score): scores job postings 0-100 for scam and ghost-job signals.
- [SAM.gov Amendment & Opportunity Change Tracker](https://apify.com/ultimatemc/sam-gov-opportunity-change-detector): shows what changed between versions of a SAM.gov notice: deadlines, set-asides, NAICS and attachments.
- [Product Recall Checker for Brands, UPCs & Products](https://apify.com/ultimatemc/product-recall-matcher): matches your brands, products, UPCs or model numbers against CPSC, FDA and NHTSA recalls.
- [App Store & Google Play Listing Policy Checker](https://apify.com/ultimatemc/app-store-listing-policy-checker): pre-checks app names, subtitles and descriptions against Apple and Google Play metadata rules.
- [Company Name Normalizer & Deduplicator for CRM](https://apify.com/ultimatemc/company-name-canonicalizer): cleans company names (Inc, LLC, d/b/a, aliases) and groups duplicates in CRM, lead or vendor lists.
- [FCC Covered List & Section 889 Bulk Screener](https://apify.com/ultimatemc/fcc-covered-list-screener): screens FCC IDs and brand names against the public FCC Covered List, with sources and timestamps (screening aid only).
- [Green Claims Checker: EU Greenwashing Ban & FTC](https://apify.com/ultimatemc/green-claims-checker): flags risky eco-friendly, carbon neutral and recyclable wording under EU, FTC and UK CMA rules.
- [Job Title to SOC Code Mapper with O\*NET Data](https://apify.com/ultimatemc/job-title-soc-code-mapper): maps job titles to SOC and O\*NET-SOC codes in bulk, with seniority and tech skills found in the posting.

Missed disclosure or false alarm? Open an issue on the **Issues** tab with the text, and we'll review the rule.

# Actor input Schema

## `texts` (type: `array`):

Instagram, TikTok, YouTube, X or Facebook captions, video descriptions or scripts, one per line. The prefill has three examples; replace them with your own.

## `items` (type: `array`):

One object per post with your own "id" and "text" (or "caption"), plus optional "platform" (instagram, tiktok, youtube, x, facebook...), "relationship" (paid, gifted, affiliate, employee, own-brand, none, unknown) and "isPaidPartnership" (true if the platform's paid-partnership tag is on). Example: \[{"id": "post-1", "text": "Loving these trainers!", "platform": "instagram", "relationship": "gifted"}]

## `datasetId` (type: `string`):

Check the output of another Actor, e.g. an Instagram, TikTok or YouTube scraper. Caption/text/description fields, the post URL and paid-partnership flags (isPaidPartnership, isSponsored, isAd...) are detected automatically.

## `textFields` (type: `array`):

Field names to read from dataset items, e.g. "caption". Leave empty to use the first of caption, text, fullText, description, desc, content, title.

## `jurisdictions` (type: `array`):

US = FTC Endorsement Guides (16 CFR 255). UK = ASA/CAP influencer guide (4th edition, Oct 2026) and CMA. Germany = Medienanstalten guide ('Werbung'/'Anzeige'). France = Law 2023-451 ('Publicité'/'Collaboration commerciale'). DE/FR rules apply only to German/French-language posts unless you turn off language detection.

## `relationship` (type: `string`):

If you know the relationship (e.g. you're checking a campaign), set it: then a post with no label is flagged even when the text has no clues. 'unknown' = detect from the text only.

## `platform` (type: `string`):

Used for video notes and '#BrandPartner' tags (OK on X under FTC guidance). 'auto' reads it from the post URL.

## `visibleChars` (type: `integer`):

A label after this many characters counts as hidden below 'more'. 125 is a common Instagram feed cut-off; use about 100 for TikTok or YouTube descriptions.

## `languageAware` (type: `boolean`):

On by default. Turn off to apply the German or French label rules to every post.

## `minSeverity` (type: `string`):

Hide findings below this level.

## `onlyFlagged` (type: `boolean`):

Skip posts with no findings (you are only charged for saved rows).

## `maxItems` (type: `integer`):

Stop after this many posts.

## Actor input object example

```json
{
  "texts": [
    "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
    "#gifted these cosy slippers from @warmtoes and I never want to take them off",
    "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy."
  ],
  "jurisdictions": [
    "us",
    "uk"
  ],
  "relationship": "unknown",
  "platform": "auto",
  "visibleChars": 125,
  "languageAware": true,
  "minSeverity": "low",
  "onlyFlagged": false,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "texts": [
        "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
        "#gifted these cosy slippers from @warmtoes and I never want to take them off",
        "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy."
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/influencer-ad-disclosure-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "texts": [
        "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
        "#gifted these cosy slippers from @warmtoes and I never want to take them off",
        "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy.",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/influencer-ad-disclosure-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "texts": [
    "Obsessed with my new serum from @glowco 😍 Use code SARAH20 for 20% off! #skincare #glow",
    "#gifted these cosy slippers from @warmtoes and I never want to take them off",
    "Ad | My honest review of the @runfast trainers after 100 miles. Not perfect, but comfy."
  ]
}' |
apify call ultimatemc/influencer-ad-disclosure-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimatemc/influencer-ad-disclosure-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PoKN6BT2UA4aweq0H/builds/WmseKvaFkXK20BbA6/openapi.json
