Account Growth Tracking
social/account-growth snapshots a public profile page’s follower count
(and platform-allowing, cumulative views) for one or more
(platform, handle) pairs. Append-only JSONL persistence at
~/.fabric/account-growth.jsonl builds a trajectory over the campaign
window. The output also includes a linear-pace projection vs a target
bar — a fast Day-7/14/21 warning signal.
cohort: validation-cohort-1handles: - { platform: tiktok, handle: myhandle } - { platform: instagram, handle: myhandle }target_followers: 1000target_views: 1000000days_target: 30cohort_start_date: 2026-04-29 # optional; defaults to first snapshot| Field | Required | Description |
|---|---|---|
cohort | no (default default) | Label for grouping snapshots, e.g. validation-cohort-1. |
handles[*] | yes | One per (platform, handle). Supported: tiktok, instagram. |
log_path | no | JSONL log path. Empty = ~/.fabric/account-growth.jsonl. |
target_followers | no (default 1000) | Bar for the followers pace projection. |
target_views | no (default 1_000_000) | Bar for the cumulative-views pace projection. |
days_target | no (default 30) | Days from cohort start by which the bar should hit. |
cohort_start_date | no | ISO date for cohort Day 0. Empty = inherit from earliest existing snapshot, or today. |
YouTube and Twitter handle fetchers are stubbed — out of scope for the validation campaign’s hot path (TikTok + IG only).
Running it
Section titled “Running it”fab-workflow social/account-growth \ --input cohort=validation-cohort-1 \ --input "handles=[{platform: tiktok, handle: myhandle}, {platform: instagram, handle: myhandle}]"Or the more ergonomic run-spec form:
workflow: social/account-growthinput: cohort: validation-cohort-1 handles: - { platform: tiktok, handle: myhandle } - { platform: instagram, handle: myhandle }fab-workflow --from-file growth-cohort-1.yamlOutput shape
Section titled “Output shape”{ "cohort": "validation-cohort-1", "log_path": "/Users/me/.fabric/account-growth.jsonl", "fetched_at": "2026-04-29T12:34:00+00:00", "day_index": 0, "snapshots": [ { "platform": "tiktok", "handle": "myhandle", "followers": 12, "total_views": 80, "fetched_at": "2026-04-29T12:34:00+00:00", "source": "tiktok-web-best-effort", "error": "" } ], "snapshots_written": 2, "curves": [ { "cohort": "validation-cohort-1", "platform": "tiktok", "handle": "myhandle", "metric": "followers", "target": 1000, "days_target": 30, "curve": [{"day": 0, "value": 12}], "latest_value": 12, "latest_day": 0, "on_track": null, "pace_per_day": null } ]}After ≥2 snapshots in different day_index, pace_per_day,
projected_at_target_day, and on_track populate. Use this as your
weekly checkpoint signal — if on_track is false at Day 14, swap
topics in your roster (or run social/feedback-bridge for data-driven
suggestions).
Reliability tier
Section titled “Reliability tier”Both supported platforms use Jina Reader (https://r.jina.ai) on the
public profile page, then regex-extract metrics. Reliability is
“best-effort” — IG and TikTok change page shapes occasionally. The
source field on each snapshot names the backend so you can audit.
| Platform | Followers | Total views proxy | Source |
|---|---|---|---|
| TikTok | yes (stats.followerCount JSON / visible UI) | heartCount (cumulative likes) | tiktok-web-best-effort |
yes (edge_followed_by.count JSON / visible UI) | not exposed publicly | instagram-web-best-effort |
For a 30-day campaign, run this once per day per cohort. The JSONL file accumulates across runs — never overwrites — so you build a real growth curve as the campaign progresses.
Validation campaign integration
Section titled “Validation campaign integration”This workflow is part of the 30-day validation playbook.
Together with social/daily-drop (generates content),
research/post-engagement (per-post metrics),
research/viral-gate-status (weekly pass/fail), and
social/feedback-bridge (suggested roster changes), it’s the closed
loop that turns “make 1k followers in 30 days” from a marketing claim
into an experiment with pre-committed bars and an honest reporting rule.