Skip to content

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-1
handles:
- { platform: tiktok, handle: myhandle }
- { platform: instagram, handle: myhandle }
target_followers: 1000
target_views: 1000000
days_target: 30
cohort_start_date: 2026-04-29 # optional; defaults to first snapshot
FieldRequiredDescription
cohortno (default default)Label for grouping snapshots, e.g. validation-cohort-1.
handles[*]yesOne per (platform, handle). Supported: tiktok, instagram.
log_pathnoJSONL log path. Empty = ~/.fabric/account-growth.jsonl.
target_followersno (default 1000)Bar for the followers pace projection.
target_viewsno (default 1_000_000)Bar for the cumulative-views pace projection.
days_targetno (default 30)Days from cohort start by which the bar should hit.
cohort_start_datenoISO 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).

Terminal window
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:

growth-cohort-1.yaml
workflow: social/account-growth
input:
cohort: validation-cohort-1
handles:
- { platform: tiktok, handle: myhandle }
- { platform: instagram, handle: myhandle }
Terminal window
fab-workflow --from-file growth-cohort-1.yaml
{
"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).

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.

PlatformFollowersTotal views proxySource
TikTokyes (stats.followerCount JSON / visible UI)heartCount (cumulative likes)tiktok-web-best-effort
Instagramyes (edge_followed_by.count JSON / visible UI)not exposed publiclyinstagram-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.

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.