Peptide Market Intelligence Scraper
Under maintenancePricing
from $0.012 / peptide mention (enriched row)
Peptide Market Intelligence Scraper
Under maintenanceTrack GLP-1s, BPC-157, and 30+ peptide compounds across Reddit, YouTube, and Amazon with sentiment, intent, and vendor leaderboards.
Pricing
from $0.012 / peptide mention (enriched row)
Rating
5.0
(1)
Developer
Omar Eldeeb
Maintained by CommunityActor stats
1
Bookmarked
6
Total users
0
Monthly active users
11 hours ago
Last modified
Categories
Share
Track GLP-1s, BPC-157, and 30+ peptide compounds across Reddit, YouTube, and Amazon with sentiment, intent, and vendor leaderboards.
What does Peptide Market Intelligence do?
This actor aggregates peptide-related consumer conversation from Reddit, YouTube, and Amazon in a single run, then enriches every matched mention with compound disambiguation, sentiment, intent classification, and vendor/brand extraction via Google Gemini 3.5 Flash-Lite.
It produces a unified dataset plus aggregate Key-Value Store reports for supplement DTC brands, peptide market researchers, and market-intelligence teams tracking consumer demand around compounds such as semaglutide, tirzepatide, retatrutide, BPC-157, TB-500, MK-677, CJC-1295, GHK-Cu, and related aliases.
Target sources:
- Reddit posts
- YouTube video search results
- Amazon product search results
TikTok is available only as an experimental opt-in and is off by default.
Why use this actor?
- Unified schema - one mention row shape across Reddit, YouTube, and Amazon, joined by canonical compound.
- Noise filtered out - peptide-keyword hits that do not contain a resolved compound are dropped before billing.
- Compound disambiguation - slang and brand names such as sema, tirz, Ozempic, Wegovy, and Mounjaro collapse to canonical compound names.
- Vendor leaderboards - see which consumer peptide retailers are discussed, broken down by sentiment when Gemini enrichment is enabled.
- Trending compound deltas - schedule the actor and every run stores a small per-compound mention count in a named key-value store in your account (
peptide-market-intel-trending, or your owntrendingStoreName); the next run with the same inputs reports risers and fallers against it. - Auto-discovery - Gemini can flag compound-like terms that are not yet in the vocabulary for later review.
How to use
- Open the input form.
- Pick sources. Default is YouTube and Amazon. Add Reddit for community discussion from the last month (old.reddit search through Apify datacenter proxy).
- Optionally filter by
compoundCategories. - Start with
maxItemsPerSource: 30to preview before scaling up. - Keep
enrichmentMode: "full"for Gemini sentiment, intent, vendor, and brand extraction. - Open the Dataset tab for individual mentions and the Key-Value Store tab for aggregate reports.
Input
Example production input:
{"sources": ["youtube", "amazon"],"compoundCategories": ["GLP-1", "healing"],"maxItemsPerSource": 25,"enrichmentMode": "full","includeAggregates": true}
Example broad input:
{"sources": ["reddit", "youtube", "amazon"],"compoundCategories": ["GLP-1", "healing"],"customVocabulary": ["orforglipron"],"maxItemsPerSource": 500,"enrichmentMode": "full","includeAggregates": true,"autoDiscover": false,"datasetName": "peptide-intel-weekly"}
Output
Dataset row, one per matched mention:
{"id": "youtube:video:TX5lzmQLg30","source": "youtube","sourceUrl": "https://www.youtube.com/watch?v=TX5lzmQLg30","nativeId": "video:TX5lzmQLg30","text": "BPC-157 Explained: The Peptide That Speeds Up Recovery...","author": "Jonathan Schoeff","createdAt": "2025-08-12T17:17:38.000Z","createdAtApproximate": false,"scrapedAt": "2026-09-29T11:30:48.646Z","engagement": {},"context": {"videoId": "TX5lzmQLg30","videoTitle": "BPC-157 Explained: The Peptide That Speeds Up Recovery"},"compounds": ["BPC-157"],"compoundCategory": "healing","compoundAliases": ["BPC-157", "Bpc 157"],"sentiment": { "label": "neutral", "score": 0.9 },"intent": "other","vendorMentions": [],"brandMentions": [],"enriched": true}
Key-Value Store reports:
TOP_COMPOUNDS- mention count per compound, overall and per sourceVENDOR_LEADERBOARD- top consumer peptide vendors with sentiment breakdownSENTIMENT_BY_COMPOUND- label distribution per compound for brand-risk monitoringTRENDING_COMPOUNDS_7D- per-compound risers/fallers vs a run about 7 days earlier (or, until one exists, the previous run with the same inputs;comparisonWindow.basissays which). The first run saysstatus: "no-history". A restarted run replaces its own snapshot, so it never counts itself twiceSUGGESTED_VOCABULARY- new compound candidates whenautoDiscover: trueRUN_SUMMARY- per-source counts, enrichment stats, event totalsOUTPUT- the same summary plus a runstatus(ok/partial/failed) and a per-sourcestatus:ok,partial(some requests blocked, rows may be missing),empty(the source answered and had no matches),blocked(no request got through: login wall, 403, rate limit),failed, orstopped(run time limit). A blocked source is never reported as "0 results": the run fails when none of the selected sources could be reached. If Apify restarts the run (server migration or reboot), rows already delivered are kept, are never pushed or charged twice, andOUTPUT.resumereports how many were recovered vs. added after the restart.
Data fields
| Field | Description |
|---|---|
id | Stable dedupe key: ${source}:${nativeId} |
source | reddit, youtube, amazon, or experimental tiktok |
sourceUrl | Canonical URL back to the item |
text | Source text normalized into a single field |
author | Username, handle, channel, or public author when available |
createdAt | When the content was published, ISO-8601 UTC. Reddit: the post time. YouTube: the exact upload time from YouTube's player data, or, if it could not be read, an estimate from YouTube's "N days ago" label taken at the middle of that range ("1y ago" = 18 months ago; see createdAtApproximate). null when the source has no date (Amazon product-search rows). Never the scrape time |
createdAtApproximate | true when createdAt is an estimate from a relative age; YouTube also keeps the original label in context.publishedTimeText |
scrapedAt | When this actor collected the row, ISO-8601 UTC |
API-only filters: dateFrom / dateTo (ISO dates, e.g. 2026-09-01) keep rows whose createdAt falls in the window; rows without a publish date (Amazon product listings) are kept and counted in OUTPUT.dateWindow. An invalid date fails the run before anything is fetched.
| engagement.upvotes | Reddit ups, YouTube likes, or Amazon helpful votes when available |
| engagement.rating | Amazon 1-5 star rating when available |
| context.subreddit | Reddit-only context |
| context.videoId | YouTube-only context |
| context.asin | Amazon-only context |
| compounds | Canonical compound names |
| compoundCategory | GLP-1, healing, GH-GHRP, cosmetic, sexual, nootropic, or longevity |
| compoundAliases | Raw alias/slang hits from the text |
| sentiment.label | positive, neutral, or negative |
| sentiment.score | 0..1 confidence |
| intent | vendor-question, experience-report, dosage-question, side-effect, price-inquiry, or other |
| vendorMentions | Consumer peptide retailer names |
| brandMentions | Drug brand names such as Ozempic, Wegovy, and Mounjaro |
| enriched | true if Gemini processed this row |
Pricing and cost estimation
Pay-per-event pricing:
- Actor start - $0.01 per run
- Peptide mention - $0.01 per enriched mention row
- Aggregate report - $0.03 per Key-Value Store aggregate doc, up to 4 charged aggregate docs per normal run
The first 10 chargeable events per run are free. A small preview run with maxItemsPerSource: 30 usually stays mostly or fully inside the free event allowance after the actor start fee.
A typical weekly scan with maxItemsPerSource: 500 across all active sources may produce around 600 enriched mentions after the regex noise filter, costing roughly $6.13 per run: $0.01 actor start, about $6.00 for mentions, and about $0.12 for aggregate reports. Heavier runs with maxItemsPerSource: 5000 may produce around 6,000 enriched mentions for about $60.13.
Tips and advanced options
- Start small: use
maxItemsPerSource: 30and one or two sources for a preview run. - Trending across runs: just schedule the actor with the same inputs (daily or weekly). Set
datasetName(e.g.peptide-weekly) to keep a separate history for a setup; this also enables the trending aggregate charge, as before. - Customize the consumer overlay: edit the
VOCAB_CONSUMER_OVERLAYKey-Value Store record to add slang, brand names, or experimental compounds without redeploying. - Auto-discovery loop: run with
autoDiscover: true, reviewSUGGESTED_VOCABULARY, then promote good candidates intocustomVocabularyor the overlay record. - Raw mode: set
enrichmentMode: "raw"to skip Gemini enrichment. It is faster, but sentiment, intent, vendor, and brand fields will be empty.
FAQ, disclaimers, and support
- Is scraping this legal? Reddit, YouTube, and Amazon all have terms of service. You are responsible for ensuring your use case complies with each platform's ToS and applicable law.
- No medical advice. Mentions extracted from consumer platforms are user-generated and not medical advice. This actor is a market-intelligence tool, not a clinical reference.
- Known limitations: Google Trends is currently disabled because its public endpoints return rate limits/HTML too often for reliable production runs. Reddit is read logged-out through crawler-style access; if Reddit closes that path the source is reported as
blockedinOUTPUT(never as 0 results). TikTok is experimental and off by default. Amazon vendor mentions are rare because retailers often obfuscate peptide names. - Support: report issues or feature requests via the Issues tab on this actor's page.
Changelog
- 2026-10 — LLM enrichment (
enrichmentMode: "full") now runs on Google Gemini 3.5 Flash-Lite, because OpenRouter retires Gemini 2.5 Flash on 2026-10-20. Same fields and same price per mention.sentiment(label and score),intent,compoundsdisambiguation,vendorMentions,brandMentionsandSUGGESTED_VOCABULARYcan come out differently from earlier runs on the same text. If the AI provider rejects the account (out of credit or key refused), the run now stops calling it once, delivers the remaining rows withenriched: false, and says so in the status message and inRUN_SUMMARY/OUTPUT(enrichment.llmStopped).