Instagram Trend Scout — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Instagram Trend Scout (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Stage: S1 - Research (first skill in the Instagram Trend Post Builder flywheel)
This skill answers one question: what is working on Instagram for this niche, right now? It gathers public signals through web search - it does not log into Instagram or call any private API - and returns a structured, machine-readable scouting report that the next skill (trend-educator) turns into a plain-language briefing.
Be honest about confidence. Web search surfaces secondhand signals (roundup articles, creator breakdowns, public engagement screenshots), not the Instagram Graph API. Label every number as an estimate and never invent precise metrics.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
keyword | string | yes | - | The niche, topic, or audience to scout (e.g. "home barista", "B2B SaaS founders", "postpartum fitness"). |
time_range | string | no | "7d" | How fresh the trends must be. One of "7d", "14d", "30d", "90d". Controls how aggressively to bias search queries toward recency. |
format_focus | string | no | "all" | Narrow the scout to one format. One of "all", "reels", "carousels", "single_image". |
region | string | no | "global" | Optional audience region to bias search and benchmarks (e.g. "US", "UK", "India"). |
keyword is missing or under 2 characters, stop and ask the user for a niche. If time_range is not one of the allowed values, default to "7d" and note the substitution.time_range (e.g. for "7d" use "this week" / "2026"). Template queries:best performing Instagram Reels {keyword} {recency}viral Instagram carousel {keyword} {recency}Instagram hook ideas {keyword} that get views{keyword} Instagram engagement trends {recency}top {keyword} creators Instagram {recency}format_focus is set, replace the format word accordingly)top_content row. Where a hard number is unavailable, set engagement_signal to a qualitative band ("low", "medium", "high", "viral") inferred from how the source describes it, and set source_url so the claim is traceable.format + structural pattern (e.g. "talking-head Reel with text hook", "5-slide problem→solution carousel"). Rank clusters by how often they recur across sources. Emit the top 3-5 as winning_formats.pattern template plus a concrete example. Emit as winning_hooks.content_gaps with the evidence that points to each gap.engagement_benchmark describing what "good" looks like in this niche this period, as bands (not false precision), plus a confidence rating reflecting how much corroborating data was found.trend-educator.{
"keyword": "string - echoes the input niche",
"time_range": "string - the effective time range used",
"scanned_at": "string - ISO date the scout was run",
"top_content": [
{
"rank": "number - 1-based, most relevant first",
"format": "string - one of reel | carousel | single_image | story",
"topic": "string - the angle/subject of the piece",
"hook_text": "string - the opening line or on-screen hook, quoted if available else paraphrased",
"hook_style": "string - the structural pattern, e.g. 'POV', 'listicle', 'contrarian', 'before-after'",
"caption_length": "string - one of short | medium | long (short <125 chars, medium 125-500, long >500)",
"hashtags": ["string - observed or inferred hashtags for this piece"],
"engagement_signal": "string - one of low | medium | high | viral (qualitative band)",
"source_url": "string - where this signal was found"
}
],
"winning_formats": [
{
"format": "string - the recurring structural format",
"frequency": "string - one of rare | common | dominant (how often it recurred across sources)",
"why_now": "string - short note on why this format appears to be surfacing this period"
}
],
"winning_hooks": [
{
"hook_style": "string - the pattern name",
"pattern": "string - a reusable fill-in-the-blank template",
"example": "string - a concrete example seen in the niche"
}
],
"content_gaps": [
{
"gap": "string - an underserved angle or question",
"evidence": "string - why this looks like a gap (demand without good supply)"
}
],
"engagement_benchmark": {
"median_engagement_band": "string - e.g. '3-6% engagement rate' or 'unknown'",
"saves_signal": "string - qualitative note on what drives saves in this niche",
"comments_signal": "string - qualitative note on what drives comments",
"confidence": "string - one of low | medium | high, based on corroboration"
}
}Present the report to the user as a scannable markdown brief, then hand the full JSON object to trend-educator:
🔎 Trend Scout - {keyword} (last {time_range})confidence level.→ Piping this to trend-educator to explain why these are working.top_content: [], set engagement_benchmark.confidence to "low", and tell the user plainly: "I couldn't find recent public signals for this niche. Try a broader keyword or a longer time_range." Offer 2-3 adjacent keywords to retry.confidence: "low", and suggest the user re-run later or supply example posts manually.engagement_signal conservatively and lower confidence. Never upgrade a qualitative band into a fake precise metric.time_range, surface that mismatch ("best available data is ~6 weeks old") rather than silently presenting it as current.trend-educator - consumes this entire output object as its input and translates the data into a plain-language briefing.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.