rea-growth · git:20261029.e4f41c1 · 2026-10-29 · sha256 9040c432c264dbb5

rea-growth git:20261029.e4f41c1A

Immutable. This exact content never changes and is served at /api/v1/blob/9040c432c264dbb5.

---
name: rea-growth
description: Use when the user wants to know how a company gets its users, reverse engineer a competitor's growth or distribution, copy what a winning company does on each channel, or study a brand's content strategy (titles, thumbnails, covers, captions, graphics) on YouTube, TikTok, Instagram, X, LinkedIn or Reddit. Also for "how did X grow", "teardown of X's marketing", "what content works for X".
---

# REA growth

A company in, a playbook out: when it grew, which moves did it, how its content is made on each
channel and what wins there, and ten plays the user can copy, each with a ready prompt.

Runs on treg. If it isn't set up (`treg --version` fails), read https://treg.to/llms.txt and follow it to
install and sign in, then come back here.

## Modes

| Mode | When | Steps | Delivers |
|---|---|---|---|
| **full** (default) | "how does TARGET grow", "teardown", "what to copy" | 0-12 | `playbook.md` + `playbook.html` + CSVs |
| **content** | titles, thumbnails, covers, captions, graphics, "what content works", and nothing about growth | 0, 1 (handles only), 7, 13 | `content.md` + `content.html` + CSVs |

## How the steps connect

- Step 1 gives the path families step 4 maps keywords to, the social handles step 7 reads, and
  the non-user touchpoints step 11 traces.
- Step 2 gives the dates (launches, funding, pixels first seen) step 3 lines up with traffic.
- Step 3 marks the inflection. Steps 4-7 and 12 compare before vs after it.
- Steps 4-8 each cover one channel group: search and AI answers, ads, who talks about TARGET,
  TARGET's own content, the product loop. Step 12 reads them all by channel.
- Step 9 says what TARGET scales next; step 10 lines every move up against how fast TARGET grew;
  step 11 orders everything along the customer's path; step 12 turns it into plays. Step 13 is
  content mode's shorter ending.

## Rules

- Every finding is **SEEN** (a call result or an image shows it; link it) or **INFERRED** (reasoned
  from what was seen; say from what). Nothing seen → "not seen", never guessed.
- Public evidence only. Create no accounts, fill no forms, contact no one.
- Before an endpoint's first call: `catalog_get` it, quote its price, check it fits the cap. Every
  DataForSEO endpoint takes a JSON array body: [{…}].
- Free first: `treg.web.search` and `treg.web.extract` with header `X-Treg-Route-Prefer: tinyfish`.
  Blocked page → the route tries the next vendor; still blocked → list it as blocked, move on.
- An endpoint fails → `catalog_search` the same job, try one alternative → else "unavailable".
- Python does all math; every number shown comes from code output. Date every count.
- ◆ After each step: 3-line finding + what the next step checks + est. cost → continue | skip | stop.

## 0 · Setup

INPUT: mode | target domain | user's company + domain | user's stage (pre-launch / early revenue /
scaling) | budget cap (default $3) | country (US → location_code 2840, language_code en). Content
mode: mode | target | channels (default all six) | cap; the user's company is optional and only
feeds the "for your company" part of step 13. Ask for anything missing before the first call.
No target → `treg.web.search` {"q":"fastest growing <category> startups 2026"} → propose 3, let the
user pick.

## 1 · The site — ~$0.001 (page reads free)

- `treg.web.map` {"url":"https://TARGET"} → every URL. Group by path family (use cases, templates,
  integrations, partners, pricing, docs, blog, changelog, compare/vs).
- `treg.web.extract` {"url":…} on home, about, pricing, sign-up, onboarding or getting-started doc,
  referral/affiliate/partner page, changelog. Record: sign-up method (SSO, email, card up front?),
  waitlist or invite codes, what is free, trial length and how it ends (days or credits), plans and
  prices, the first thing a new user is told to do, every place a non-user meets the product (shared
  outputs, public pages, embeds, badges, invites, emails sent to outsiders).
- Handles: every official social account linked from the site (footer, about, press page) and the
  founders' X handles (about page, else `treg.web.search` {"q":"TARGET founder"}). A handle not
  linked from the site counts only if its bio links back to TARGET.
- Content mode: read home and about only, collect the handles, go to step 7.

## 2 · Stack, partners, news — ~$0.16

- `predictleads.companies.technology_detections` {company_id_or_domain} → analytics, ad pixels, A/B
  testing, referral/affiliate, lifecycle email, chat. Keep score ≥ 0.9 and not behind_firewall (the
  rest includes sites their users build). A pixel = SEEN; what they run on it = INFERRED.
- `predictleads.companies.connections` → partners, integrations, investors.
- `predictleads.companies.news_events` + `predictleads.companies.financing_events` → launches,
  press, funding, reported revenue (label it "reported").

## 3 · When it grew — ~$0.15

- `dataforseo.x.dataforseo-labs-google-historical-rank-overview-live`
  [{"target":"TARGET","location_code":2840,"language_code":"en","date_from":<24 months ago>}] →
  monthly organic + paid traffic estimate.
- Traffic by channel: `akta.x.website-traffic` {"company":"TARGET"} needs the team's own Akta key;
  without one, say "unavailable" and use the organic vs paid split above.
- Mark the inflection (largest sustained step up). Line up step 2's launches, funding and the
  first-seen dates of ad pixels against it.

## 4 · Search and AI answers — ~$0.14

- `dataforseo.google.domain.ranked_keywords`
  [{"target":"TARGET","location_code":2840,"language_code":"en","limit":1000,"order_by":["ranked_serp_element.serp_item.etv,desc"]}]
  → keyword, URL, position, volume. Map URLs to step 1's path families; brand vs non-brand share;
  families that ranked before the inflection.
- 3 buyer questions for the category → `cloro.ai-search.chatgpt.scrape` {"prompt":…,"country":"US"}:
  order brands are named, which pages are cited.

## 5 · Ads — ~$0.03

- Meta: `scrapecreators.x.v1-facebook-adlibrary-search-companies` {"query":"TARGET name"} → pick the
  page whose ig_username or category matches → `scrapecreators.x.v1-facebook-adlibrary-company-ads`
  {"pageId":…,"status":"ACTIVE","trim":true} (searchResultsCount = active total; first page sorted
  by impressions).
- Google: `serpapi.google.ads.transparency`
  {"engine":"google_ads_transparency_center","text":"TARGET","num":40}
  (search_information.total_results = creative count; total_days_shown = how long each ran).
- LinkedIn: `adyntel.linkedin.search.ads.company` {"company_domain":"TARGET"}.
- TikTok: `anyapi.tiktok.ad_library_search` {"advertiserName":…} (no region with advertiserName).
- Per network: active count, oldest still running (60+ days = winner), hook, offer, landing page
  (read it with `treg.web.extract`). No ads → SEEN "no ads on this network".

## 6 · Who talks about TARGET — ~$0.005

- X: `anyapi.x.search.posts` {"query":"from:FOUNDER","queryType":"Top"} and
  {"query":"TARGET min_faves:300 -from:FOUNDER","queryType":"Top"}.
- YouTube: `anyapi.youtube.search` {"query":"TARGET category","sortBy":"popular"}.
- Reddit: `scrapecreators.reddit.search.posts`
  {"query":"TARGET","sort":"top","timeframe":"year","trim":true}, next page with `after`.
- Label each item founder/team | creator (#ad or sponsored = paid) | user | press. Top 10 by
  engagement, dated against the inflection. Note every contest, hackathon, quote-post campaign,
  waitlist or invite-code drop.

## 7 · TARGET's own content, channel by channel — ~$0.05 + image reads (free)

Step 6 is what others say; this step is what TARGET publishes and how it is made. Run it for every
handle from step 1. Five parts: pull, rank, look, read against the checklist, write up.

**Pull.** Per channel, the latest 60 posts or the past 6 months, whichever comes first, page by page;
stop early if the cap would be passed. Save the rows to `rea/<channel>/posts.csv` with the date pulled.

| Channel | Call (and how to page) | Keep |
|---|---|---|
| YouTube | `scrapecreators.x.v1-youtube-channel-videos` {"handle":"handle","sort":"latest"}, next page with `continuationToken`; once more with "sort":"popular" (first page) for the all-time best | title, thumbnail, views, published, length; Shorts vs long |
| TikTok | `crawl4ai.tiktok.user.videos` {"account":"handle","limit":60} (up to 100 in one call) | description, hashtags, cover, plays, saves, shares, length, sound |
| Instagram | `scrapecreators.instagram.user.posts` {"handle":"handle"}, next page with `next_max_id` | kind (reel, carousel, photo), image, caption, likes, comments |
| X | `anyapi.x.user.posts.timeline` {"handle":"handle"} (about 20 a page), next page with `cursor` = previous `nextCursor`; media with `tikhub.x.twitter-web-fetch-user-media` {"screen_name":"handle"}, paged by `cursor` | text, views, likes, reposts, media |
| LinkedIn | `harvestapi.linkedin.company.posts` {"companyUniversalName":"slug","scrapePostedLimit":"6months","page":1}, then page 2, 3…, passing `paginationToken` when returned | text, images, document carousels, reactions; staff reposts vs page posts |
| Reddit | TARGET's own account if it has one; otherwise step 6's Reddit rows (content mode: run step 6's Reddit call here) | title, subreddit, self or link post, score, comments |

**Rank.** Engagement per channel: views on YouTube, TikTok and X; likes + comments on Instagram;
reactions on LinkedIn; score on Reddit. Drop posts under 7 days old (not settled). With Python, mark
the top quarter and the bottom half. Compare only within a channel, never across. Under 20 posts →
report them, call no pattern ("too few posts to call a pattern").

**Look.** Download the thumbnail, cover, first slide or image of every top-quarter post and of 5
bottom posts into `rea/<channel>/` at once (TikTok and Instagram links expire within hours), then
open each file. An image that does not download is "not read", never described from its caption.

**Read** each image and title against the channel's checklist. What the image shows is SEEN; why it
might work is INFERRED.

- **YouTube.** Title: length, number or money, first person ("I built…"), question, brackets, the
  promise. Thumbnail: face and its emotion, words on it (count; ≤ 4 is usual), product or outcome
  shown, before/after split, contrast and main colour, logo. Do title and thumbnail repeat or add to
  each other? Shorts vs long, length.
- **TikTok.** Cover: the frame chosen, the words on it. Hook: first line of the description, on-screen
  text of the opening. Format: talking head, screen recording, slideshow, skit, green screen. Sound:
  trending or original. Length, hashtag count, posting rhythm.
- **Instagram.** Mix of reels, carousels, photos, and which kind wins. Cover or first slide: headline
  size, words, template. Carousels: slide count, what the last slide asks. Caption: the line before
  "more". The grid as a whole: repeated colours, fonts, frames, logo's place.
- **X.** The first line (before "Show more"), length, thread or single, media: none, product
  screenshot, chart or metric card, video, meme. Founder vs brand account: which outperforms; do
  numbers (revenue, users) drive the best posts?
- **LinkedIn.** The two lines before "see more", format (text, image, document carousel, video),
  people vs product in the image, company page vs staff posts promoted (match against step 5's
  LinkedIn ads).
- **Reddit.** Title pattern (question, story, "I made…"), subreddits, self vs link, whether the
  account says who it works for.

**Write up**, per channel:
- **Pattern.** 3-5 traits the top quarter shares and the bottom half lacks, each counted ("8 of 9
  top thumbnails show a face, 2 of 12 bottom ones"). Counted on the images = SEEN; why = INFERRED.
- **House style.** What repeats across every post: colours (named, hex read off the images), fonts or
  lettering, templates, logo's place, recurring formats or series.
- **Formulas.** The 2-3 fill-in templates behind the top titles, covers or hooks ("I built [outcome]
  in [short time] with TARGET"), one real example each.
- **What changed** before vs after step 3's inflection, where the dates allow (full mode).

## 8 · Links and loops — ~$0.05

- `dataforseo.web.backlinks.summary` [{"target":"TARGET","include_subdomains":true}] → referring
  domains; referring_links_tld shows links from the product's own user subdomains
  (e.g. *.TARGET-app.com).
- `dataforseo.web.anchors.list`
  [{"target":"TARGET","limit":40,"order_by":["referring_domains,desc"]}] → one anchor on thousands
  of domains ("Edit with", "Made with", "Powered by") = a product loop; its first_seen dates it. Drop
  link-seller anchors (SEO, backlinks, Telegram).
- Read 3 pages carrying the loop anchor with `treg.web.extract`: what the badge says, where it links.

## 9 · What is next — ~$0.04

- `predictleads.companies.job_openings` {company_id_or_domain} → keep openings last seen in the past
  30 days; growth, SEO, paid, lifecycle, community, devrel, partnerships, sales, content, design,
  video and country roles → the channel each scales.

## 10 · Moves vs growth — no calls

Which moves lined up with growth speeding up, and how fast each move itself spread. Python only;
every input is already pulled.

- **Moves.** One row per dated move from steps 2 and 5-8: launch, raise, founder or brand post,
  creator video, ad start, loop anchor first_seen, new content format. Keep channel, date, link and
  reach (views, likes, score).
- **Growth speed.** From step 3's monthly traffic: growth % month over month and its change
  (speeding up or slowing). From step 4's brand keywords: their `keyword_info.monthly_searches`
  summed per month, a second demand signal.
- **Spread speed.** Per post: engagement ÷ days since posting, ranked within its channel only.
  Top quarter = fast spreader.
- **Line up.** Per move: growth in the 2 months before vs the month of and the 2 after, for traffic
  and for brand searches; the lift is after minus before. Moves under a month apart form one
  cluster; credit the cluster, never one move inside it.
- **Per channel.** Monthly count of moves, and of fast spreaders, against growth 0, 1 and 2 months
  later: Spearman correlation and the months it rests on. Under 12 months or under 5 moves on a
  channel → list the rows, call no correlation.
- Write up: the 3 moves or clusters with the largest lift, the channel whose moves lead growth (and
  by how many months), fast spreaders that moved nothing. Each lift is SEEN as numbers; that the
  move caused it is INFERRED (monthly data, moves overlap, growth has other causes).
- Save `rea/moves-vs-growth.csv`.

## 11 · The path — no calls

One row per stage, each cell SEEN or INFERRED with links:
Get noticed (founder posts, press, podcasts, ads, search, AI answers, own content) → Sign up
(method, card, waitlist/invites, partner links) → First win (the first action, time to it) → Pay
(plans, trial end rule, free limits) → Share (what reaches non-users: shared outputs, invites,
badges, referrals).

## 12 · The playbook — no calls

- Ten plays, ordered by evidence × timing (started before the inflection) × lift (step 10) × fit
  for the user's stage. Each: the play (one line + stage) | evidence (SEEN/INFERRED + links) | effort (day / week /
  quarter) | time to first result + the metric | cost to try | THE PROMPT: a paste-ready prompt for
  the user's agent that starts the play for the user's company (concrete: pages to build, rules to
  draft, events to add, lists to find, posts to make). At least one play per channel where step 7
  found a pattern; its prompt carries that channel's formula and house style, filled in for the
  user's product.
- Things to skip: 2-3 plays that look good but the evidence does not support, and why.
- Timeline: every dated move (launch, raise, founder post, creator video, ad start, loop anchor
  first_seen, hire, new content format) in date order, against the traffic curve from step 3, each
  with its lift and spread speed from step 10.
- By channel (X, YouTube, TikTok, Instagram, Reddit, LinkedIn, ads, search and AI answers, the
  product loop): the moves TARGET made there, its pattern and house style from step 7, what worked
  (the number that moved, SEEN) and what did not (flat or complained about), each linked.
- 14-day plan per channel the user should use: day by day, what to post (with the formula to use),
  set up or test, and the one number to check on day 14.
- Method notes: endpoints called, blocked sites, images not read, the date of every count, total
  data cost, interpretations marked INFERRED, no affiliation with TARGET. Report the bill: balance
  before minus after, and per step.
- Deliver `playbook.md` + one-file `playbook.html` (light/dark, every source linked, a contact sheet
  per channel of top and bottom thumbnails side by side, the traffic curve with every move pinned and
  its lift, a "Copy the prompt" button per play) + the
  CSVs. End with the first play to run this week.

## 13 · Content report (content mode) — no calls

- Per channel: sample size and dates, the pattern, the house style, the formulas, the top 5 posts
  linked.
- Across channels: the brand's shared style, and where one channel breaks it.
- For the user's company (when given): per channel, 5 ready titles or covers written from the
  formulas, and one paste-ready prompt for the user's agent that makes the first post in that style.
- Method notes as in step 12, plus channels with too few posts.
- Deliver `content.md` + one-file `content.html` (light/dark, a contact sheet per channel of top and
  bottom thumbnails side by side, every post linked) + the CSVs.