agentleFS
saypage-aisaypage-ai/saypage-plugin/skills/funnel-review/SKILL.md

funnel-review

Skill0 starsChanged 13 days agoMITView on GitHub

Review and optimize keyword funnels already running: follow each one from a Reel's views to comments, DM taps, links sent, page visits and the sales the user reports, compare funnels with each other, find the step that loses the most people, fix that one step in the DMs or on the page, and check next time whether it worked. Use for requests like "how did my keyword do", "optimize my funnel", "improve my conversion", "is my automation working", "people comment but nobody buys", "why doesn't anyone tap the DM".

The file

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

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

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

    If no automation has run yet, there is nothing to read: use reel-funnel instead.

    line 14
  2. Distinctive:

    Ask how many sales or bookings came in since the funnel started, and whether their tool shows the link's tag.

    line 40
  3. Distinctive:

    If one fails, report page loads on their own, with their window, and draw no ratio across them.

    line 63
  4. Distinctive:

    Wait for at least 48 hours of activity.

    line 74
  5. Distinctive:

    Copy what the best funnel does: When one taps far better than the others, read both sets of messages side by side: its wording, its button, …

    line 99
  6. Very specific:

    If the page holds up, the question is the offer (offer-finder), and the user may know more than the numbers do: ask what people say when …

    line 122
  7. Very specific:

    Run every rewritten message through natural-voice before showing it.

    line 167

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

performance-review asks which posts worked. This skill asks what happened to the people a Reel sent down the path, where they stopped, and what to change. Each round changes one thing, so the next one can tell whether it helped: that loop is what improves a funnel, more than any single rewrite.

If no automation has run yet, there is nothing to read: use reel-funnel instead.

1. Collect the numbers

With Saypage connected: get_account, then list_automations. There the messages read opening_message_copy, opening_message_button_label, private_message_copy (the link message) and recipe_link_button_label; the gates follow_gate_enabled and email_gate_enabled; the destination page_id or custom_link.

Then, for the funnels that ran, ten at most: the most links_sent first, then the newest Reels (get_automation_activity allows about six calls a minute: when it refuses, wait the seconds it names):

StepWhere it comes from
Views and reachget_instagram_post_insights on the automation's post (an ad has none)
Keyword commentstriggered and people in get_automation_activity; a post's comments also hold the account's own replies
First DM sentfirst_dm_sent
Tappedtapped
Gatesasked_to_follow; asked_for_email and gave_email
Links sentlinks_sent
Stoppednot_sent by cause: never_tapped (got the first DM, did not tap), window_expired, plan_limit
Page loads from DMsinstagram_dm for this page, in get_page_stats
Clicks from DMsinstagram_dm in this page's click_channels; destinations names the links
Sales or bookingsonly from the user: ask for the number in their shop or booking tool

Ask how many sales or bookings came in since the funnel started, and whether their tool shows the link's tag. If they have no number, say the path stops at the click, and that a tagged link would show the rest next time.

State only numbers that a response returned or the user gave. When a metric is in unavailable, pass on its reason.

Leave out the user's own tests. recent names each commenter: on a small funnel, accounts that are plainly theirs can be most of the numbers. An automation counts from its activated_at, so links_sent: 0 on a new one is no result.

2. Check that the numbers belong together

These tools count over different windows. Before putting page loads next to links_sent, all three must hold:

  1. This automation alone sends this page, as its main link or an extra button (list_automations).
  2. days covers the whole life of the funnel. get_page_stats goes back 90 days, while the activity summary covers 13 months.
  3. The automation stayed on this post. An automation moved from another Reel carries that Reel's history in its summary.

If one fails, report page loads on their own, with their window, and draw no ratio across them. Even when all three hold, page loads count every load, repeat visits and link-preview bots included, so call the figure "page loads per link sent", which can pass 100%, and never a conversion rate or a number of people.

Clicks are taps on a page's links, not people: one person can tap twice, and a few taps are missed. Saypage counts them since November 2026, so a funnel that ran before then shows fewer than it got, and it sees nothing after the click.

3. Read the path

Wait for at least 48 hours of activity. Below about 30 keyword comments, show the counts and skip the percentages: a few people more or less would swing them.

  • Keyword comments per 1,000 views: triggered ÷ views × 1,000.
  • Tap rate: tapped ÷ first_dm_sent.
  • Gate rate: gave_email ÷ asked_for_email.
  • Delivery: links_sent ÷ triggered.
  • Click rate, when step 2 holds: instagram_dm in click_channels ÷ instagram_dm in channels, labelled as an estimate.
  • Sale rate, when the user gave a number and step 2 holds: sales ÷ clicks from DMs, labelled as an estimate.

People still under way (waiting_for_tap, waiting_for_follow, waiting_for_email, in_progress) are not lost yet: say how many there are.

There is no universal good rate, so quote no benchmark. Compare a funnel with the user's earlier funnels, and with itself after a change.

4. Compare the funnels

With several automations, line them up before fixing anything, one row per funnel, using the measures of step 3. Then:

  • Start with the funnel where a fix reaches the most people: new keyword comments keep coming on a live Reel, and a quiet one has little left to win, so note its fix for next time.
  • Copy what the best funnel does. When one taps far better than the others, read both sets of messages side by side: its wording, its button, its gate, its keyword. Different Reels bring different people, so treat the gap as a lead to test, not as proof.

5. Find the weakest step, and fix only that

What you seeUsual causeFix
Reach, few keyword commentsthe ask comes late, is not said aloud, or promises littlethe ask, in reel-script and instagram-caption
Many comments, few triggeredpeople write another wordread list_instagram_comments (skip by_you), then change the keyword (update_automation)
not_sent with cause plan_limitthe plan's monthly DM limitcompare plan.dms_this_month with plan.limits.monthly_dm_limit, and tell the user plainly
not_sent with cause window_expiredInstagram's 24-hour window closed before the next DMfewer steps or a shorter gate; a closed window cannot be reopened
failed as a stage in recentdelivery problemgive each reason; do not guess
Low tap ratethe first DM does not say what they getrewrite opening_message and its button (dm-writing)
Stopped at a gatethe gate asks too much for what they getreword it, or weigh dropping it
Links sent, few page loadsthe link message gives no reason to open itrewrite link_message (dm-writing)
Page loads, few clicksthe pagebelow
Clicks go to the wrong linka secondary link competes with the main buttondestinations: cut it or move it down the page (get_page_guide)
Clicks, no salesthe offer, or the page they land on after Saypageask the user; offer-finder

When the page does not send people on, reread the page and go through "A page made for one Reel" in get_page_guide: does the first screen match the Reel, is the main button visible at once, does it say what they get and the price, does the page answer the doubts from the comments? If the page holds up, the question is the offer (offer-finder), and the user may know more than the numbers do: ask what people say when they do not buy.

Propose one change, written out in full. Two changes at once cannot be told apart.

6. Apply it, with the user's go-ahead

  • DMs and keyword: update_automation. A live automation stays live and keeps its history. Each message stays in the user's language, and button labels stay within 20 characters. The change applies to new comments only.
  • Page: update_page, preview_page, then publish_page once they agree.

7. Check it worked

Followers cannot be split into two groups here, so each test runs one after the other: note the numbers, change one thing, then compare what came after.

The activity summary keeps adding up, so keep today's numbers and the date in the output. At the next round, subtract them to get the period since the change, and wait for about 30 new keyword comments before judging it. A better result on a fresher, bigger Reel may come from the Reel, so say so. Keep what helped, undo what did not, then move to the next weakest step.

Output

FUNNEL  ·  PASTA  ·  Reel "15-minute lemon pasta"  ·  since 3 Oct

views               52,300
keyword comments       612   12 per 1,000 views
first DM sent          604
tapped                 391   65% of first DMs    <- biggest loss
links sent             388
page loads from DMs    402   about 1 per link sent (loads, not people)
clicks from DMs        118   29% of page loads (taps, not people)
sales                   31   from your shop, your number

STILL UNDER WAY   9 waiting for the tap

WEAKEST STEP   a third of people never tap the first DM
WHY            the message doesn't say what they get
CHANGE         "Here's the 15-minute pasta 🍋 Tap below and the recipe is yours."
               button: "Send me the recipe"
COMPARE WITH   tapped 391 of 604 on 10 Oct: review again in a week

Run every rewritten message through natural-voice before showing it.

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.