Analytics collector
AI skills for content creation, SEO, advertising, image prompting, and strategy. Works standalone with Claude Code — works better with Genfeed.ai. Install: bunx skills add genfeedai/skills
npx -y skills add genfeedai/skills --skill analytics-collectorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Collect X and LinkedIn post metrics for the Genfeed content loop and emit normalized Metric JSON for feedback scoring.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.8 KB, as published. Nobody here has run it
Analytics Collector
You measure what happened after publishing. Given the ids of posts that went out, you pull their engagement from X and LinkedIn and normalize each to one Metric. You are the analytic in trend -> remix -> produce -> post -> analytic -> repeat.
This is where the loop closes. The orchestrator pipes each Metric you emit into gf record-metric <id>; the connector recomputes that item's feedbackScore; and gf feedback <term> turns those scores into a multiplier that lifts previously-successful themes to the top of the next trend scan. You produce the raw measurement that makes the factory learn.
Pure worker: reads one token from the environment, persists nothing, writes no manifest itself.
Run It
bun run scripts/collect.ts --platform x --ids 1799111,1799222
bun run scripts/collect.ts --platform linkedin --ids "urn:li:share:6844785523593134080"
A ContentItem (or an array of {platform, postId}) on stdin is an alternative to --ids — every derivative with a postId is collected:
bun run ../genfeed-connector/gf.ts get <id> \
| bun run scripts/collect.ts --platform x
Requires Bun 1.1+. Zero dependencies — only Node built-ins and global fetch.
Platforms
X
- Endpoint:
GET https://api.x.com/2/tweets?ids=...&tweet.fields=public_metrics,organic_metrics,non_public_metrics. public_metricsworks with an app-only or user token;organic_metrics/non_public_metrics(impressions, link clicks) need a user-context token for the author. If the richer fields are denied, it automatically retries withpublic_metricsalone.- Mapping:
impressions <- impression_count,likes <- like_count,comments <- reply_count,shares <- retweet_count + quote_count,clicks <- url_link_clicks.
- Endpoint:
GET https://api.linkedin.com/rest/socialActions/<urn>withLinkedIn-Version+X-Restli-Protocol-Version: 2.0.0. - Mapping:
likes <- likesSummary.totalLikes,comments <- commentsSummary.aggregatedTotalComments. - Impressions/clicks for member posts require organization analytics scopes and are left undefined here.
Per-id failures warn to stderr and are skipped; the run returns whatever it could collect.
Output
{
"count": 1,
"metrics": [
{
"platform": "x",
"postId": "1799111",
"impressions": 10400,
"likes": 612,
"comments": 41,
"shares": 88,
"clicks": 230,
"capturedAt": "2026-06-08T12:00:00.000Z"
}
]
}
Each metric matches the Metric shape in genfeed-connector/lib/schema.ts.
How It Closes The Loop
export X_BEARER_TOKEN="$(bun run ../genfeed-connector/gf.ts token x)"
# 1. measure
bun run scripts/collect.ts --platform x --ids "$POST_ID" > metrics.json
# 2. record each metric — this recomputes feedbackScore on the item
jq -c '.metrics[]' metrics.json | while read -r m; do
bun run ../genfeed-connector/gf.ts record-metric "$ITEM_ID" <<<"$m"
done
# 3. next cycle: trend-scout's raw scores are multiplied by (1 + feedback),
# so themes that performed before rise to the top
bun run ../genfeed-connector/gf.ts feedback "ai agents" # -> { "term": "ai agents", "multiplier": 0.74 }
collect measures, the connector remembers, trend-scout re-ranks. That three-skill cycle is the locked loop.
Security
- Tokens (
X_BEARER_TOKEN,LINKEDIN_ACCESS_TOKEN) are read from the environment, used in memory, and never written anywhere. Resolve them through the connector. - All calls are read-only GETs against the platform analytics endpoints; this worker never posts, edits, or deletes.