Skip to content
    ↑↓ to choose · Enter to open

    · 15 min read

    Zacks Stock & Mutual Fund Rank Scraper: $5.00 per 1,000 Results (2026)

    By CrawlerBros Engineering Team

    Each stock record carries up to 64 documented fields, returning the Zacks Rank, Style Scores, industry rank percentiles, and consensus EPS revisions without login requirements. The free-plan price is $5.00 per 1,000 results, and mutual fund or ETF lookups return 53 and 30 documented fields respectively. This Actor is built for quantitative researchers, portfolio managers, and fintech developers who need automated fundamental timeliness ratings. It is not for high-frequency day traders who require live streaming order book data or sub-second tick feeds, which Zacks quote pages do not provide.

    Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Zacks Stock & Mutual Fund Rank Scraper on Apify and run the prefilled example.

    How reliable is Zacks Stock & Mutual Fund Rank Scraper in production?

    Across the last 30 days of public runs on the Apify platform, Zacks Stock & Mutual Fund Rank Scraper recorded 65 runs with the following outcomes.

    Outcome Runs Share
    Succeeded 65 100.0%
    Failed 0 0.0%
    Aborted by the user 0 0.0%
    Timed out 0 0.0%
    Total 65 100.0%

    No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.

    What does it cost to run Zacks Stock & Mutual Fund Rank Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.

    The primary cost driver is the size of your input ticker array combined with the maxItems parameter, since result charges scale directly with records written to the dataset. Boolean toggles like includeDetailedEstimates and includeFinancials add extra page requests per symbol but do not increase the dataset item count. Test your pipeline with one or two symbols and maxItems set to a low value before running large watchlists.

    How do you run Zacks Stock & Mutual Fund Rank Scraper from the API?

    The schema marks 1 of its 14 controls as required: mode. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~zacks-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"stockQuote"}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "stockQuote"
    }
    
    run = client.actor("crawlerbros~zacks-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "stockQuote"
    }
    
    const run = await client.actor('crawlerbros~zacks-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.

    Which Zacks Stock & Mutual Fund Rank Scraper inputs matter, and which can you skip?

    The mode parameter is the single required control and dictates whether the Actor processes stocks, mutual funds, or ETFs. Supply your symbols to tickers, fundTickers, or etfTickers depending on the mode you chose. Leave deep enrichment flags such as includeFinancials and includeCompanyDescription disabled on initial runs unless your downstream application strictly requires them.

    • mode (string): What to fetch. Default: "stockQuote".
    • tickers (array): Stock ticker symbols to look up, e.g. AAPL, MSFT, NVDA. Case-insensitive. Default: ["AAPL"].
    • fundTickers (array): Mutual fund ticker symbols to look up, e.g. FCNTX, VFIAX. Case-insensitive. Default: [].
    • etfTickers (array): ETF ticker symbols to look up, e.g. QQQ, SPY, VOO. Case-insensitive. Default: [].
    • minZacksRank (integer): Only emit stocks/funds with a Zacks Rank greater than or equal to this (1=Strong Buy ... 5=Strong Sell). Records with no published rank pass through.
    • maxZacksRank (integer): Only emit stocks/funds with a Zacks Rank less than or equal to this (1=Strong Buy ... 5=Strong Sell). Records with no published rank pass through.
    • minStyleScore (string): Only emit stocks whose VGM Style Score is at least this letter grade (A is best). Records with no published score pass through.
    • includeDetailedEstimates (boolean): Fetch the Zacks detailed-earning-estimates page for each stock to add next-quarter and next-year Sales/EPS consensus estimates, year-over-year growth %, and 60-day analyst revision counts (beyond the current-quarter/current-year figures already included by default). Adds one extra request per ticker. Default: false.
    • includeStyleScorecards (boolean): Add the ~10 underlying metrics behind each Style Score (Value: P/E, P/B, P/S, PEG, EV/EBITDA, Debt/Equity, etc.; Growth: EPS/sales/cash-flow growth, ROE, margins; Momentum: price change over multiple windows, EPS estimate revision %) with the stock's own value alongside its industry median for comparison. No extra request - parsed from the same quote page already fetched. Default: false.
    • includePriceTargets (boolean): Fetch the Zacks price-target-stock-forecast page for each stock to add the average/highest/lowest analyst price target, upside % to the average target, the Average Broker Rating (ABR, 1-5 scale) with its 1-month-ago comparison, and the current Strong Buy/Buy/Hold/Sell/Strong Sell recommendation breakdown. Adds one extra request per ticker. Default: false.
    • includeCompanyDescription (boolean): Fetch the Zacks company-summary snippet for each stock to add a plain-text business description (industry, products/services, headquarters). Adds one extra request per ticker. Default: false.
    • includeFinancials (boolean): Fetch the Zacks income-statement, balance-sheet and cash-flow-statements pages for each stock to add up to 5 fiscal years of annual financial-statement line items (revenue, expenses, assets, liabilities, equity, operating/investing/financing cash flows, in $ millions). Adds three extra requests per ticker. Default: false.

    The other 2 controls, with their defaults, are listed in the input schema on Zacks Stock & Mutual Fund Rank Scraper on Apify.

    Fixed-choice controls: mode accepts stockQuote (Zacks Rank, Style Scores, valuation), mutualFundQuote (Zacks Mutual Fund Rank, performance), etfQuote (Zacks ETF Rank, expense ratio, NAV); minStyleScore accepts A (A only), B (B or better), C (C or better), D (D or better), F (F or better (no filter)).

    What does Zacks Stock & Mutual Fund Rank Scraper return?

    Output items provide structured Zacks Rank values (1 to 5), VGM style scores, analyst revision counts, and industry rankings relative to sector peers. The records omit empty fields when Zacks does not publish them and do not include real-time tick-by-tick market depth.

    Output: per-stock (mode = stockQuote)

    • ticker, companyName, exchange
    • lastPrice, currency, priceChange, priceChangePercent, volume, lastUpdated
    • afterMarketPrice, afterMarketChange, afterMarketChangePercent
    • zacksRank (1-5), zacksRankText (e.g. Hold)
    • valueScore, growthScore, momentumScore, vgmScore (A-F letter grades)
    • industryRankPosition, industryRankTotal, industryRankPercentile, industryName, sectorName
    • openPrice, dayLow, dayHigh, week52Low, week52High, avgVolume20Day, marketCap
    • dividendPerShare, dividendYieldPercent, beta
    • earningsEspPercent, mostAccurateEstimate, currentQtrEstimate, currentYrEstimate, expEarningsDate
    • priorYearEps, nextYearEpsGrowthPercent, expEpsGrowth3to5yrPercent
    • forwardPE, pegRatio
    • numAnalystsCurrentQtr, numAnalystsCurrentYr - number of analysts contributing to the current-quarter/current-year consensus estimate
    • epsRevisionsUpCurrentQtr, epsRevisionsDownCurrentQtr, epsRevisionsUpCurrentYr, epsRevisionsDownCurrentYr - count of analyst EPS estimate revisions in the last 60 days, by direction
    • epsEstimateCurrentQtr, epsEstimateCurrentYr - current consensus EPS estimate (Zacks Rank Factor #2: Magnitude)
    • epsEstimateRevisionTrendCurrentQtrPercent, epsEstimateRevisionTrendCurrentYrPercent - % change in the consensus EPS estimate over the last 60 days
    • epsSurpriseHistory - array (up to 4 entries) of the last reported quarters: period, reportedEps, estimatedEps, surprisePercent
    • detailedEstimates (only when includeDetailedEstimates is enabled) - object with:
    • companyDescription (only when includeCompanyDescription is enabled) - plain-text business summary (products/services, headquarters, segments)
    • financials (only when includeFinancials is enabled) - object with incomeStatementAnnual, balanceSheetAnnual, cashFlowAnnual, each an array of up to 5 annual records (most recent fiscal year first). Every record has a periodEndDate plus the statement's line items (e.g. sales, costOfGoods, grossProfit, netIncomeLoss for income; cashAndEquivalents, totalCurrentAssets, totalLiabilities for balance sheet; netCashFromOperatingActivities, netCashFromInvestingActivities, netCashFromFinancingActivities for cash flow), in $ millions as reported by Zacks
    • priceTargets (only when includePriceTargets is enabled) - object with avgPriceTarget, highPriceTarget, lowPriceTarget, upsideToAvgPriceTargetPercent, numAnalystsPriceTargets, avgBrokerRating (ABR, 1-5 scale), avgBrokerRatingOneMonthAgo, numBrokerRecommendations, and recommendationBreakdown (current strongBuy/buy/hold/sell/strongSell analyst counts)
    • valueScorecard, growthScorecard, momentumScorecard (only when includeStyleScorecards is enabled) - each an object with stock (the ticker's own metric values) and industryMedian (its industry's median), covering:
    • sourceUrl, recordType: "stock", scrapedAt

    Output: per-fund (mode = mutualFundQuote)

    • ticker, fundName, category, fundDescription
    • lastPrice, currency, priceChange, priceChangePercent, asOf
    • zacksMfRank (1-5), zacksMfRankText
    • ytdReturnPercent, threeMonthReturnPercent, sixMonthReturnPercent, oneYearReturnPercent, threeYearReturnPercent, fiveYearReturnPercent, tenYearReturnPercent
    • ytdPercentileRankObjective (and per-period equivalents) - 1 (best) to 99 (worst) rank among peers
    • inceptionDate, manager, managerStartDate, managerRating
    • minInitialInvestment, minSubsequentInvestment, iraMinimum
    • expenseRatioPercent, managementFeePercent, max12b1FeePercent, redemptionFeePercent, maxSalesLoadPercent, maxDeferredLoadPercent
    • turnoverPercent, yieldPercent, secYieldPercent, unrealizedGainPercent
    • avgPE, avgPriceToBook, avgEpsGrowthPercent, avgMarketValueMillion, totalIssues, shareholders
    • assetAllocation - object with whichever of stocksPercent, bondsPercent, cashPercent, convertiblePercent, preferredPercent, otherPercent, foreignStockPercent, foreignBondPercent, foreignHedgedPercent, emergingMarketPercent, highYieldBondPercent, intermediateBondPercent, preciousMetalPercent, largeGrowthPercent, largeValuePercent, smallGrowthPercent, smallValuePercent the fund actually publishes (equity funds report style-box rows, bond funds report bond-type rows)
    • topHoldings - array of the fund's largest positions: name, percentOfPortfolio, valueMillion
    • sectorWeightings - object of sector/country → % of portfolio (equity funds only; omitted when the fund doesn't publish sector data)
    • riskStatistics - object keyed by threeYear/fiveYear/tenYear, each with beta, alpha, rSquared, stdDev, sharpe
    • netAssetsMillion, fundFamily, address, phone
    • sourceUrl, recordType: "mutualFund", scrapedAt

    Output: per-ETF (mode = etfQuote)

    • ticker, etfName, category, benchmarkIndex, fundSummary, issuer
    • lastPrice, currency, priceChange, priceChangePercent, volume, asOf
    • zacksEtfRank (1-5), zacksEtfRankText
    • openPrice, previousClose, bid, ask, dayLow, dayHigh, week52Low, week52High
    • navMonthEnd, premiumDiscountMonthEndDollar (month-end closing market price minus month-end NAV, in dollars - Zacks does not publish this as a percentage)
    • expenseRatioPercent, dividendPerShare, dividendYieldPercent
    • sourceUrl, recordType: "etf", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Zacks Stock & Mutual Fund Rank Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode as stockQuote, mutualFundQuote, or etfQuote depending on the security type.
    2. Populate the corresponding symbol array in tickers, fundTickers, or etfTickers while leaving the other ticker arrays empty.
    3. Set maxItems to 5 to run a minimal sanity check on schema formatting before submitting a full watchlist.
    4. Optionally restrict output by setting minZacksRank or maxZacksRank between 1 and 5, or minStyleScore to B or better.
    5. Enable includeStyleScorecards if you need the 10 underlying valuation, growth, and momentum ratios compared against industry medians.
    6. Enable includeDetailedEstimates or includeFinancials only if you need forward quarterly consensus figures or multi-year annual statement tables.
    7. Execute the run and verify that output items contain non-empty ticker and zacksRank values before widening tickers.

    How do you apply it? Three worked playbooks

    These are Zacks Stock & Mutual Fund Rank Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Screening & signal generation

    Outcome: Pull the Zacks Rank and Style Scores for a watchlist to build a rules-based screener

    Configure: Set mode to "stockQuote", tickers to ["AAPL", "MSFT", "NVDA", "AMD", "TSLA", "GOOGL"], minZacksRank to 1, maxZacksRank to 2, minStyleScore to "B", and maxItems to 50.

    Working method: Run the Actor with rank and style filters applied, then verify the returned records match only Strong Buy or Buy classifications alongside top VGM grades.

    Deliverable: A filtered dataset containing high-conviction tickers paired with their assigned Zacks Rank and VGM letter score.

    Stop condition: The returned dataset is empty because the rank or VGM score thresholds filtered out all submitted symbols.

    Use case 2: Portfolio monitoring

    Outcome: Track industry/sector rank drift for holdings over time

    Configure: Set mode to "stockQuote", tickers to ["AAPL", "MSFT", "NVDA"], and maxItems to 50.

    Working method: Schedule periodic executions on your existing holdings and compare industryRankPosition and industryRankPercentile across runs to detect macro sector rotation.

    Deliverable: A time-series collection of industry rank positions and percentiles for portfolio holdings.

    Stop condition: The industryRankPosition field is omitted across the majority of holdings in the output dataset.

    Use case 3: Fintech data pipelines

    Outcome: Feed Zacks Rank and valuation ratios into a research dashboard

    Configure: Set mode to "stockQuote", tickers to ["AAPL", "MSFT"], includeDetailedEstimates to true, includeStyleScorecards to true, and maxItems to 50.

    Working method: Fetch baseline fundamental data with scorecards enabled, then map the valueScorecard, growthScorecard, and momentumScorecard metrics to your database schema.

    Deliverable: A structured JSON record containing consensus earnings revisions and granular style metrics relative to industry medians.

    Stop condition: The valueScorecard object is missing from the dataset despite includeStyleScorecards being set to true.

    What breaks, and how do you design around it?

    • Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.

    Zacks omits metrics for securities lacking analyst coverage, so build your parsing logic to handle missing keys rather than expecting null values. Invalid ticker symbols return no record, so verify symbol resolution against your input list by comparing dataset size to submitted tickers. If Zacks blocks direct HTTP requests during large batches, configure proxyConfiguration to use proxy routing.

    When should you not use Zacks Stock & Mutual Fund Rank Scraper?

    Do not use this Actor if you require real-time market data or intraday candlestick streaming; Zacks publishes delayed quotes geared toward fundamental timeliness ratings rather than live order execution. For rapid price snapshots, Barchart Stock Quotes Scraper provides standard pricing and volume metrics. If you need to filter the broader equity universe using dozens of technical chart indicators and screen presets before selecting tickers, use Finviz Stock Screener Scraper. If your mandate involves auditing institutional ownership stakes or tracking hedge fund portfolio allocations directly from regulatory filings rather than analyst consensus scores, use SEC EDGAR 13F Institutional Holdings Scraper.

    What should you check before trusting the output?

    • Check that zacksRank is an integer from 1 to 5, or that zacksMfRank / zacksEtfRank exists for fund modes.
    • Verify that industryRankPosition and industryRankTotal are present and greater than 0 for common equities.
    • Confirm that epsSurpriseHistory returns an array of up to 4 objects containing reportedEps and surprisePercent.
    • Verify that detailedEstimates contains both salesEstimates and earningsEstimates when includeDetailedEstimates is set to true.
    • Confirm that expenseRatioPercent is populated as a valid float for mutualFundQuote runs.

    None of this proves a record is correct. It gives a scheduled Zacks Stock & Mutual Fund Rank Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What does it cost to scrape 1,000 ticker quotes?

    The free-plan price is $5.00 per 1,000 results, based on $0.005 per result written to the dataset. Apify also bills platform usage consumed during the run. Paid Apify tiers pay less per result.

    How reliable has this Actor been over the past month?

    In the last 30 days, 65 runs succeeded out of 65 total runs, representing a 100.0% success rate with 0 failed runs, 0 timeouts, and 0 user aborts.

    Do I need a paid Zacks account or authentication cookies?

    No login, cookies, or API keys are required. The Actor extracts data directly from publicly accessible quote pages on Zacks.com.

    Why are some fields missing from certain ticker records?

    Zacks does not publish every metric for every security. The Actor omits empty fields entirely rather than returning them as null values in the JSON output.

    Does enabling financial statements increase the result charge?

    No. The result charge applies per record written to the dataset. Toggles like includeFinancials add extra page requests per ticker, which consumes platform usage, but do not increase the result charge.

    Where to go next

    When you are ready to run it, open Zacks Stock & Mutual Fund Rank Scraper on Apify; the free plan covers up to 1,000 results a month.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-25.

    • Actor last updated by its maintainers on 2026-08-10.

    • Run outcome figures cover the 30 day public window ending 2026-09-25.

    • Zacks Stock & Mutual Fund Rank Scraper on Apify

    Featured actors

    Zacks Stock & Mutual Fund Rank Scraper

    Scrape Zacks.com stock quotes and mutual fund quotes: Zacks Rank (1-5), Style Scores (Value/Growth/Momentum/VGM), industry & sector rank, valuation ratios, earnings estimates, and mutual fund performance/fees. Lookup by ticker symbol, no login required.

    Run on Apify ↗