agentleFS
tymoshenko-dmytrotymoshenko-dmytro/marketing-agent-kit/skills/funnel-screenshots/SKILL.md

funnel-screenshots

Skill2 starsChanged 23 days agoMITView on GitHub

Walk a public quiz / onboarding funnel end to end in a real Chromium with iPhone emulation and capture every unique screen as a retina screenshot (1179×2556), then document the paywall, discount modals and the empty payment form — never typing payment data. Output is numbered PNGs, a step log and an INDEX.md. Use for competitor funnel teardowns, onboarding benchmarks, paywall research, or "screenshot every step of this quiz". Triggers: "screenshot this funnel", "walk this quiz", "capture the onboarding", "teardown their paywall".

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

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

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

    every ordinary screenshot is 1179×2556.

    line 68
  2. Very specific:

    if options are cut off, the screen scrolls inside a container — check that a -scrolled.png companion exists.

    line 70

≈ “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

Funnel screenshots

Drives a marketing funnel in a real Chromium with iPhone emulation, screenshots every unique screen at 1179×2556 (DPR 3), documents the paywall and stops at the payment form. Proven on long health, diet and lifestyle app quizzes — 30 to 120 screens per funnel.

Setup (one time)

bash ${CLAUDE_SKILL_DIR}/scripts/setup.sh

Creates a venv in ~/.cache/marketing-agent-kit/funnelshot-venv (override with FUNNELSHOT_VENV), installs Playwright, downloads Chromium if missing (~150 MB), and smoke-tests that screenshots really come out at DPR 3. Re-run it any time; it is idempotent and says exactly what to install if something is missing. Everything below assumes:

PY=~/.cache/marketing-agent-kit/funnelshot-venv/bin/python
SK=${CLAUDE_SKILL_DIR}/scripts

Capture a funnel

$PY $SK/funnelshot.py --url https://example.com/quiz --out ~/funnels/example-quiz

Then the paywall (numbering continues from where the walk stopped — if it saved 53 screens, use --prefix 54):

$PY $SK/paywall.py --out ~/funnels/example-quiz --prefix 54

Then the index:

$PY $SK/makeindex.py --out ~/funnels/example-quiz --title "Example — quiz v1" \
    --notes "Female · 170 cm / 75 kg · goal 65 kg"

Result: shots/*.png, INDEX.md, log.json (every step with URL, headings, options), state.json + last_url.txt (for resuming).

state.json holds the funnel's cookies and localStorage, and log.json / last_url.txt can carry the email you typed. The scripts write a .gitignore into the output folder that keeps these three out of git. Share shots/ and INDEX.md, not the folder as a whole.

Useful flags

FlagWhy
--email you@example.comthe funnel has an email gate; without it the walk stops there
--units imperialUS / UK funnels: 5 ft 7 in / 165 lb / goal 145 lb
--height 170 --weight 75 --goal 65 --age 35 --name Alexoverride the answers
--resume --start 68continue after a crash or the step cap
--max-steps 260the default; very long funnels need it
--device desktop1440×900 @ DPR 2 instead of iPhone
--locale en-GBregion-specific prices and units
--headedwatch it run (uses real Chrome)

Long funnels hit the step cap midway. The walk saves its state, so continue with the number it printed ("resume with: --resume --start 68"); numbering stays continuous and log.json is appended to.

Workflow

  1. Run funnelshot.py. Watch the printed steps — each line shows URL, headings and the options it saw. That log is how you spot a mishandled screen.
  2. Read the last lines. Why did it stop? The payment form (good), an email gate (re-run with --email), the step cap (--resume), or "nothing left to click" (usually an unrecognised CTA — see troubleshooting).
  3. Run paywall.py. It tiles the paywall, catches discount and gift modals, screenshots each plan selected, then opens the payment step and the empty card form.
  4. QA before reporting — not optional:
    • every ordinary screenshot is 1179×2556; anything taller is a deliberate full-page shot (makeindex.py lists those separately);
    • actually look at three files: the first screen, one with a long option list, the last one. Nothing cut off, text crisp;
    • if options are cut off, the screen scrolls inside a container — check that a -scrolled.png companion exists.
  5. Run makeindex.py, then report: number of unique screens, folder, the funnel structure step by step, paywall prices / trial / auto-renew / guarantee terms, and exactly where and why the capture stopped.

Report what actually happened. If a funnel has no discount modal, say so; if the card form was unreachable, say why.

Guardrails

Allowed, because the screenshots need it:

  • ticking consent checkboxes (health data / privacy / terms) that gate the next step;
  • typing an email the user gave you into an email gate;
  • claiming discounts, selecting plans, opening the payment modal, expanding the card form.

Never:

  • typing card numbers, CVV, expiry or any payment data;
  • clicking Pay / Continue Securely / Google Pay / Apple Pay / PayPal / Place order;
  • creating an account with a password (stop and report).

The scripts enforce this: pay-button text is in the skip list, and funnelshot.py stops as soon as a real card field, payment iframe or password field appears. Do not remove those guards to "get further".

Ask the user before entering their email — it is their address and their inbox; marketing emails will follow. One approval covers the funnel you're working on, not the next one. A dedicated inbox for research is a good idea.

Capture only what any visitor sees, at a human pace, one run per funnel. Check the site's terms if you plan to publish the screenshots.

Several funnels at once

One subagent per funnel, each with its own --out folder. Give each agent: the URL, the folder, the setup command, the three commands above, the guardrails and the QA checklist. They must not share a folder.

When something misbehaves

  • references/troubleshooting.md — every trap hit so far: blurry screenshots, bot traps that redirect to a tarpit, clicks that time out on overlays, disabled Continue buttons, imperial units, unrecognised CTAs, gift modals, loaders, inner-scroll lists.
  • references/funnel-patterns.md — how long app funnels are usually built and where they block automation. A sanity check for what a "normal" result looks like.

Adapt it

  • New CTA wording in your market ("Let's go", "Weiter")? Add it to CONT in funnelshot.py.
  • Different answers matter for your category (B2B role, company size)? Add presets next to the height / weight rules in funnelshot.py.

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.