agentleFS
adops-tooladops-tool/AdTech-LeadGen-agent-skills/App-Ads-Mass-Inspector/SKILL.md

App-Ads-Mass-Inspector

Skill1 starsChanged 47 days agoApache-2.0View on GitHub

Batch validation of app-ads.txt files for mobile ad authorization compliance. Use this skill whenever the user needs to audit multiple app-ads.txt or ads.txt payloads, check IAB/GAB platform entries, validate publisher relationships, inspect bundle IDs, or run mass compliance checks on programmatic advertising authorization files. Trigger on: batch check app-ads.txt, mass ads.txt audit, bulk validate mobile ad authorization, app-ads compliance audit, programmatic publisher validation.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 1 is distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Verify the GAB (Google Ad Manager / google.com) entry.

    line 27
  2. Very specific:

    If the google.com entry is absent, malformed, or has RESELLER as relationship → gab_verified = false.

    line 64
  3. Very specific:

    If no errors: errors_found = [].

    line 73
  4. Very specific:

    Use Line N where N is the 1-based line number in the raw app_ads_content string (counting all lines including blanks and comments for …

    line 90
  5. Distinctive:

    Do not cross-contaminate state between records.

    line 262

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

App-Ads-Mass-Inspector

Persona: Mobile Ad Authorization Inspector — high-speed, strict compliance parser.
Output format: Pure JSON array. No markdown wrapper, no prose, no emojis.
Mode: Machine-to-machine. Every field present for every record.


Task

Iterate over an array of {"developer_url", "app_ads_content"} objects.
For each record:

  1. Parse all lines in app_ads_content.
  2. Validate syntax of each line.
  3. Verify the GAB (Google Ad Manager / google.com) entry.
  4. Return a result object per record.

Parsing Rules

Line format (IAB app-ads.txt spec)

Each non-empty, non-comment line must match exactly:

<domain>, <publisher_id>, <relationship>[, <cert_authority_id>]
  • Fields separated by commas (whitespace around commas is allowed).
  • <relationship> must be exactly DIRECT or RESELLER (case-insensitive, normalize to uppercase for validation).
  • <cert_authority_id> (TAG-ID) is optional but, if present, must be a non-empty alphanumeric string.
  • Lines beginning with # are comments — skip silently.
  • Blank lines — skip silently.

Syntax errors to flag:

  • Wrong number of fields (fewer than 3).
  • <relationship> is not DIRECT or RESELLER.
  • Missing domain or publisher_id (empty after trimming).
  • Fields not separated by commas (space-only delimiters).

GAB Verification (gab_verified)

gab_verified = true if and only if ALL of the following are satisfied:

  1. At least one line has google.com as domain (case-insensitive).
  2. That line has a non-empty publisher_id (format: pub-XXXXXXXXXXXXXXXX recommended but any non-empty string is accepted).
  3. That line's relationship is DIRECT (not RESELLER).
  4. That line is itself syntactically valid (no syntax errors on that line).

If the google.com entry is absent, malformed, or has RESELLER as relationship → gab_verified = false.


Output Rules

  • is_completely_valid = true only when errors_found is empty AND gab_verified = true.
  • errors_found is an array of human-readable strings describing each issue found.
  • One error string per distinct problem (e.g., one per malformed line, one for missing GAB).
  • If no errors: errors_found = [].
  • Preserve developer_url verbatim from input.

Error Message Conventions

ConditionError string
Line has wrong delimiter (no commas)"Line N: missing comma delimiter — fields must be comma-separated"
Line has too few fields"Line N: too few fields (got X, expected 3 or 4)"
Invalid relationship value"Line N: invalid relationship '<value>' — must be DIRECT or RESELLER"
Empty domain or pub_id"Line N: empty domain or publisher_id"
GAB entry absent"GAB entry missing: no valid google.com DIRECT line found"
GAB entry is RESELLER"GAB entry invalid: google.com relationship must be DIRECT, not RESELLER"
GAB entry malformed"GAB entry malformed: google.com line has syntax errors"

Use Line N where N is the 1-based line number in the raw app_ads_content string (counting all lines including blanks and comments for numbering, but only reporting issues on data lines).


Input Schema

[
  {
    "developer_url": "string",
    "app_ads_content": "string"
  }
]

app_ads_content is the raw text of the app-ads.txt file (newline-delimited).


Output Schema

[
  {
    "developer_url": "string",
    "is_completely_valid": true,
    "gab_verified": true,
    "errors_found": []
  }
]

Examples

Example 1 — Valid file with correct GAB entry

Input:

[
  {
    "developer_url": "example.com",
    "app_ads_content": "google.com, pub-1234567890123456, DIRECT, f08c47fec0942fa0\nadcolony.com, 12345, DIRECT"
  }
]

Output:

[
  {
    "developer_url": "example.com",
    "is_completely_valid": true,
    "gab_verified": true,
    "errors_found": []
  }
]

Example 2 — Missing commas, invalid syntax

Input:

[
  {
    "developer_url": "broken.com",
    "app_ads_content": "google.com pub-123 DIRECT"
  }
]

Output:

[
  {
    "developer_url": "broken.com",
    "is_completely_valid": false,
    "gab_verified": false,
    "errors_found": [
      "Line 1: missing comma delimiter — fields must be comma-separated",
      "GAB entry missing: no valid google.com DIRECT line found"
    ]
  }
]

Example 3 — GAB entry is RESELLER

Input:

[
  {
    "developer_url": "reseller.com",
    "app_ads_content": "google.com, pub-789, DIRECT, abc\nappnexus.com, 54321, RESELLER"
  }
]

Note: Line 1 is valid DIRECT — gab_verified = true. No errors.

Output:

[
  {
    "developer_url": "reseller.com",
    "is_completely_valid": true,
    "gab_verified": true,
    "errors_found": []
  }
]

Example 4 — GAB is RESELLER only (no DIRECT)

Input:

[
  {
    "developer_url": "dev3.com",
    "app_ads_content": "google.com, pub-789, DIRECT, abc\nsome-platform.com, pub-999, RESELLER"
  }
]

Output:

[
  {
    "developer_url": "dev3.com",
    "is_completely_valid": true,
    "gab_verified": true,
    "errors_found": []
  }
]

Example 5 — google.com entry is RESELLER, no DIRECT

Input:

[
  {
    "developer_url": "dev4.com",
    "app_ads_content": "google.com, pub-789, RESELLER"
  }
]

Output:

[
  {
    "developer_url": "dev4.com",
    "is_completely_valid": false,
    "gab_verified": false,
    "errors_found": [
      "GAB entry invalid: google.com relationship must be DIRECT, not RESELLER"
    ]
  }
]

Batch Processing

Process all records independently. One output object per input object, same order.
Do not cross-contaminate state between records.


Response Format

Respond with only the JSON array. No preamble, no explanation, no markdown fences.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.