Building a systematic equity screening pipeline often runs into a data access wall. Scraping retail financial portals manually requires managing custom DOM parsers for quote headers, estimate revision tables, and sector comparisons. When tracking earnings estimate momentum or quantitative style metrics like Value, Growth, and Momentum (VGM) scores, raw HTML structures on financial sites frequently change, breaking internal pipelines.
The Zacks Stock & Mutual Fund Rank Scraper addresses this by extracting structured JSON directly from Zacks quote pages for equities, mutual funds, and ETFs without requiring authentication or session handling.
Bypassing Post-Fetch Overhead with Input-Level Filtering
A common inefficiency in quantitative pipelines is pulling data for an entire index or ticker universe, only to filter out 80% of the results in post-processing. Because this scraper supports server-side input filters, you can drop unwanted records before they populate your default dataset.
Setting parameters like minZacksRank and maxZacksRank forces the scraper to evaluate the ticker's rank directly during extraction. For instance, if you only want actionable long candidates, setting maxZacksRank to 2 restricts emitted records exclusively to Zacks Rank 1 (Strong Buy) and Zacks Rank 2 (Buy).
Similarly, the minStyleScore filter screens for VGM letter grades (A through F). If your downstream strategy requires high-value equities that also exhibit strong earnings momentum, passing "A" or "B" to minStyleScore excludes lower-tier stocks at runtime.
{
"mode": "stockQuote",
"tickers": ["AAPL", "NVDA", "MSFT", "AMD", "INTC"],
"maxZacksRank": 2,
"minStyleScore": "B",
"includeStyleScorecards": true,
"maxItems": 50
}
Filtering at the input level prevents unnecessary dataset writes. When evaluating pricing, each record written to the Apify default dataset is billed as a "result" event at $0.005 per event under the FREE tier (scaling down to $0.003 for GOLD, PLATINUM, and DIAMOND tiers). An initial run charge of $0.005 per GB of memory allocated to the run applies when the Actor starts. On top of these event charges, users pay for standard platform usage consumed by the execution at their plan's rates.
Extracting Analyst Estimate Revisions and Style Scorecard Medians
The primary engine behind the Zacks Rank is the movement of consensus earnings per share (EPS) estimates. Evaluating raw price performance alone misses the underlying analyst revisions that drive rating changes.
When running in stockQuote mode, setting includeDetailedEstimates to true appends consensus estimate targets alongside 60-day revision counts (epsRevisionsUpCurrentQtr, epsRevisionsDownCurrentYr, etc.) and historical EPS surprise data.
To benchmark a stock against its broader sector, setting includeStyleScorecards to true extracts underlying valuation and growth metrics alongside the median values of its specific Zacks industry.
{
"ticker": "NVDA",
"zacksRank": 1,
"zacksRankText": "Strong Buy",
"vgmScore": "A",
"industryRankPosition": 12,
"industryRankTotal": 250,
"epsEstimateCurrentYr": 2.85,
"epsRevisionsUpCurrentYr": 14,
"epsRevisionsDownCurrentYr": 0,
"valueScorecard": {
"stock": {
"peF1": 35.2,
"pegRatio": 1.15
},
"industryMedian": {
"peF1": 22.4,
"pegRatio": 1.60
}
}
}
This structural breakdown allows algorithmic models to flag divergence—such as stocks with rising consensus estimates (epsRevisionsUpCurrentYr > 0) whose PEG ratios remain below their industry median.
Configuring Runs for Mutual Funds and ETFs
Beyond individual equities, the tool processes funds and exchange-traded products via distinct operational modes: mutualFundQuote and etfQuote.
Step 1: Define Target Tickers and Mode
Select the mode corresponding to your target asset class. Mutual fund runs require fundTickers, while ETF runs use etfTickers.
{
"mode": "mutualFundQuote",
"fundTickers": ["VFIAX", "FCNTX"],
"maxItems": 10
}
Step 2: Execute and Stream Output
When fetching mutual funds, the output schema pivots away from style scorecards and earnings estimates. Instead, it extracts expense structures (managementFeePercent, max12b1FeePercent), trailing historical returns (oneYearReturnPercent, fiveYearReturnPercent), asset allocation breakdowns, and top holdings arrays.
For ETF executions (mode: "etfQuote"), the output provides net asset value metrics (navMonthEnd, premiumDiscountMonthEndDollar), benchmark tracking data, and dividend yields.
Note that this scraper is designed for targeted quote extraction across discrete lists of tickers; it does not perform automated full-market screeners across thousands of unlisted tickers in a single pass without explicitly supplying those symbols in the input array.
Operational Execution via Python
To integrate this workflow into an existing data engine, call the run programmatically using the Apify API client.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"mode": "stockQuote",
"tickers": ["TSLA", "AMZN", "GOOGL"],
"maxZacksRank": 3,
"includeDetailedEstimates": True,
"includeStyleScorecards": True,
"maxItems": 100,
}
run = client.actor("crawlerbros/zacks-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
ticker = item.get("ticker")
rank = item.get("zacksRank")
up_revisions = item.get("epsRevisionsUpCurrentYr")
print(f"{ticker}: Rank {rank} | Up Revisions (FY): {up_revisions}")
Handling financial data extraction via structured payloads eliminates brittle regex scraping logic. By specifying rank and style grade constraints within the execution input, pipelines consume clean data payloads while controlling per-event resource usage on every run.
Zacks Stock & Mutual Fund Rank Scraper is the Actor behind these examples. If a selector in your own version breaks, compare your output against the fields listed in its README first.
Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-09-27. Check the Actor page for the current rates.
Top comments (0)