---
title: "Alternative data for investors"
description: "Alternative data for hedge funds and investment research: hiring, prices, app ranks, reviews and store counts, collected from the web as dated series."
canonical: https://www.zenrows.com/use-cases/alternative-data
updated: 2026-10-18
---

# Alternative data for investors

Alternative data is information about a company that comes from outside its filings and earnings calls, such as job postings, product prices, app rankings, reviews and store counts. Zenrows collects those signals from protected and dynamic websites with Crawl, Batch and Extract, and returns timestamped records you can turn into point-in-time series for investment research.

## Sample output: one hiring observation

```json
{
  "entity": "Example Retail Corp",
  "ticker": "EXRC",
  "signal": "open_roles",
  "source_url": "https://careers.example-retail.com/jobs",
  "captured_at": "2026-10-16T06:00:12Z",
  "run_id": "weekly-2026-w42",
  "value": 412,
  "by_function": {
    "stores": 251,
    "engineering": 96,
    "supply_chain": 41,
    "corporate": 24
  },
  "new_since_last_run": 37,
  "removed_since_last_run": 18,
  "top_locations": ["Dallas, TX", "Columbus, OH", "Remote"],
  "http_status": 200,
  "raw_snapshot": "s3://alt-data-raw/EXRC/2026-10-16/careers.html"
}
```

An illustrative weekly observation built from one careers-site crawl, with the capture time and a pointer to the raw page kept beside the value so the series can be audited and rebuilt.

## Alternative data sources investors collect

Web-sourced alternative data is a set of company-level signals that update faster than quarterly reports. Each one comes from a different kind of public page, and each needs a fixed collection schedule to become a usable series.

| Job | Data you collect | Typical sources |
|---|---|---|
| Hiring velocity | Open roles by function and location, new and removed postings | Company careers pages, Workday and Greenhouse job boards, Indeed, LinkedIn |
| Price and promotion tracking | Shelf price, discount depth, out-of-stock flags per SKU | Retailer and brand sites, Amazon, Walmart |
| App and product traction | Chart rank, rating count, review velocity per app | Apple App Store and Google Play chart and detail pages |
| Consumer sentiment | Review text, star ratings, complaint volume over time | Trustpilot, Yelp, Reddit, product review pages |
| Physical footprint | Store openings and closures, opening hours, locations | Company store locators, Google Maps |
| Private company and deal signals | Funding rounds, reported headcount, product launches | Crunchbase, Tracxn, GlobeNewswire, PR Newswire |

## Why alternative data web scraping breaks

A signal is only useful if the series behind it is continuous and every value can be traced to a page. Most failures show up as gaps or silent changes months later, when a backtest stops matching.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Blocked runs leave gaps | A week of 403s on a job board becomes a missing point that the model reads as zero | Zenrows' stealth and automatic retries get through Cloudflare, DataDome, Akamai and similar protections, so each scheduled run completes |
| Pages built in JavaScript | A store locator or app chart returns an empty shell, and the count drops to nothing | Adaptive Stealth Mode escalates to browser rendering when a page needs it, and a full browser render can also capture the page's background network calls (XHR) |
| Layout changes mid-series | A redesign moves the job count, and a selector starts reading the wrong number | Extract returns structured fields without selectors, plus the raw HTML to reprocess history |
| Source moves | A company switches applicant tracking system and its careers URL changes | Crawl rediscovers every job URL from the careers homepage on each run |
| Country-specific data | Prices, stock levels and app ranks differ by market | Geotargeting collects each market from inside that country |
| Compliance review | The fund's compliance team asks where each data point came from | Every record carries its source URL and capture time, and Zenrows provides SOC 2 and ISO 27001 documentation for vendor review |

## How to collect alternative data with Zenrows

1. **Map tickers to pages.** For each company in your universe, list the pages that carry each signal: careers site, store locator, app pages, review pages.
2. **Discover the URLs.** Run Crawl from each careers or locator homepage, keeping only paths that match patterns such as `/jobs/` or `/stores/`.
3. **Snapshot on a fixed schedule.** Submit the full URL list to Batch at the same time every week, with the ticker and date in each `external_id`.
4. **Keep raw and parsed.** Store the raw page next to the parsed fields, so you can re-parse history when a definition changes.
5. **Build the series.** Aggregate per ticker and period, and flag any period where a source returned nothing.

```javascript Node.js
// Discover every job posting URL on a company's careers site
const res = await fetch("https://api.zenrows.com/v1/crawls", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_ZENROWS_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url: CAREERS_URL,
    max_items: 2000,
    max_pages: 2500,
    include_patterns: ["/jobs/"],
    output_format: "markdown",
  }),
});
const { crawl_id } = await res.json();
// Read results later with GET https://api.zenrows.com/v1/crawls/{crawl_id}
console.log(crawl_id);
```

```python Python
# pip install requests
import datetime
import requests

week = datetime.date.today().isoformat()
universe = {
    "EXRC": [CAREERS_URL, STORE_LOCATOR_URL],
    "EXMP": [APP_PAGE_URL, REVIEWS_URL],
}
tasks = [
    {"url": url, "external_id": f"{ticker}|{week}|{i}"}
    for ticker, urls in universe.items()
    for i, url in enumerate(urls)
]
job = requests.post(
    "https://async.api.zenrows.com/v1/jobs",
    headers={"X-API-Key": "YOUR_ZENROWS_API_KEY"},
    json={
        "type": "regular",
        "status": "closed",
        "zenrows_params": {"mode": "auto", "extract": "auto"},  # Adaptive Stealth Mode + Extract
        "tasks": tasks,
    },
)
print(job.json())
```

```bash CLI
npx -y @zenrows/cli init
zenrows crawl create CAREERS_URL --include-patterns /jobs/ --max-pages 2500 --follow
zenrows crawl results CRAWL_ID --out jobs-urls.jsonl
# weekly.jsonl: one {"url": "..."} per page in the universe
zenrows batch create weekly.jsonl --wait
zenrows batch results JOB_ID --out snapshot-2026-10-16.jsonl
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to open the careers pages of these five retailers and count open roles by function. Return one row per company with the count, the page URL and the time you read it.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Find every job, store or product URL behind a source | [Crawl](/products/crawl) | Follows links on the domain and keeps the URLs that match your patterns |
| Snapshot the whole universe every week | [Batch](/products/batch) | Thousands of URLs as one job, each tagged with your ticker and date |
| Get the same fields from many differently built sites | [Extract](/products/extract) | Automatic structured extraction returns JSON and the raw HTML, without selectors per site |
| Test a new signal on a handful of pages | [Fetch](/products/fetch) | One request returns the rendered page from protected sites |
| Let an analyst check a signal before it is engineered | [MCP Server](/mcp) | Claude, Cursor and other MCP clients read live pages through Zenrows |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Series continuity | Every ticker has a value for every period since the signal started | Count missing periods per ticker and source after each run |
| Point-in-time integrity | Values are stored as captured and never overwritten by later runs | Confirm every record has a capture timestamp and an immutable raw snapshot |
| Universe coverage | Each company in the universe has at least one working source per signal | Report tickers with no successful page in the latest run |
| Definition stability | A field means the same thing before and after a site redesign | Re-parse a sample of old raw pages and compare against stored values |
| Run completion time | The weekly snapshot finishes before the research cut-off, even as the universe grows | Compare each Batch run's finish time with the scheduled cut-off |

## Alternative data FAQ

### What is alternative data?

Alternative data is any information about a company or market that does not come from traditional sources such as financial statements, filings, exchange prices or analyst reports. Web-sourced examples include job postings, product prices, app rankings, review volume and store counts. Investors use it to see changes in demand, costs or growth before they appear in reported numbers.

### What are the main alternative data sources?

The web is the largest public source: careers sites and job boards, retailer and marketplace pages, app stores, review platforms, store locators, and funding databases. Other categories include card transaction panels, geolocation data and satellite imagery, which are licensed from providers rather than collected from public pages.

### How do hedge funds use alternative data?

Funds turn web signals into time series per ticker, test whether those series lead a reported metric such as revenue or margin, and add the ones that hold up to their research or models. Hiring trends, price changes and review volume are common starting points because they update weekly and map clearly to a company.

### Should I buy from alternative data providers or collect it myself?

Providers sell packaged datasets with history, which saves time but gives every subscriber the same signal. Collecting it yourself lets you choose the companies, fields and definitions, and keep the methodology in house. A common split is to buy history where a provider already has it, and collect the custom signals no vendor sells with a web data layer like Zenrows.

### Can I backfill history for a new signal?

Live pages show the present, so most web series start on the day you begin collecting. Start collection early, even before the signal is approved. Some pages carry their own history, such as review dates, price history charts or posting dates on job listings, and those can be parsed to extend a series backwards.

### How do I turn scraped pages into a point-in-time dataset?

Store every observation with the time it was captured, the source URL and a pointer to the raw page, and never overwrite a value once written. When a definition changes, re-parse the stored raw pages into a new field instead of editing old rows. A backtest then reads only values whose capture time is before the trade date, which keeps look-ahead bias out of the research.

### Is web-sourced alternative data compliant?

Funds usually limit collection to publicly available pages, respect site terms, avoid personal data and keep records of where each data point came from, so compliance can review sources for material non-public information risk. Rules differ by jurisdiction, so check your sources and use with your compliance and legal teams.

### What does a fund's data vendor review ask about web collection?

Expect questions on security controls, data lineage and how sources are chosen. Zenrows provides SOC 2 and ISO 27001 documentation for the security part. For lineage, store the source URL, capture time and raw page with every observation, as in the sample above, so a reviewer can trace any value in a backtest to the page it was read from on that date.

## Related use cases

- [Financial data scraping](https://www.zenrows.com/use-cases/financial-data-scraping.md): Rate tables, IR pages, filings, fund data and central bank releases, as JSON tables and Markdown documents.
- [Job scraping](https://www.zenrows.com/use-cases/job-scraping.md): Job postings, salary ranges and hiring signals from job boards and ATS career pages, as one feed.
- [Review scraping](https://www.zenrows.com/use-cases/review-scraping.md): Review text, ratings, dates and replies from Amazon, Google, Yelp, Trustpilot and G2, every page.
- [Competitor price scraping](https://www.zenrows.com/use-cases/price-scraping.md): Competitor prices, promotions, shipping and stock per SKU from retailers and marketplaces, refreshed on your schedule.
- [Competitive intelligence](https://www.zenrows.com/use-cases/competitive-intelligence.md): Pricing, hiring, reviews, launches and partners across your market, structured for battlecards and strategy.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
