shoal Install

Real users are the new unblockable residential proxies

Sites today are in a technological arms race to block scrapers. Shoal collects data from real users' browsers by parsing HTML, and intercepting fetch() requests with a browser extension, and sends them to your backend. Bring your own workers for free or pay as you go to hook into our data firehose.

Tide is an open source extension with public scraping rules you can audit.

Updates are batched every 5 seconds for each user

workers: real browsers in the shoal shoal your backend
https://instagram.com/p/3868587352050111
IGinstagram · post
Hello gamers
https://melon.com/song/detail.htm?songId=33042781
MEmelon · song detail
FALLING DOWN
https://instagram.com/users/24117283
IGinstagram · user profile
GET /api/v1/users/24117283/info/
https://linkedin.com/in/janedoe
LIlinkedin · user profile
Jane Doe
shoal
backend · prod @instagram/post
12,401patches / hr
backend · prod @instagram/user
8,772patches / hr
backend · staging @linkedin/user
87patches / hr
wss · websocket POST · webhook POST · webhook
matched DOM element intercepted fetch / XHR patch from peer firehose · websocket webhook · POST
Privacy first by design

Many scraping tools use unsuspecting users or compromised machines as part of their infrastructure. Shoal workers are always fully informed of what they're running on their machine.

  • Users opt-into sharing data for each requested site
  • Data is extracted by evaluating static scraping rules. Workers never run dynamic code
  • Official rules never target data that could identify the current user
  • Every byte of data sent to the backend is visible and unobfuscated
  • Shoal doesn't send HTTP requests or interact with the website on behalf of the user
Tide · Permission Request
Your pool is asking you for data from
IG instagram.com
@instagram/post caption, likes, author
@instagram/user username, follower_count
No data targeting your personal account will be collected

Source data for whatever you're building

We piece together events for you to give you the full picture whenever things change. When you're ready to scale, you only pay the amount of unique data you receive, and get updated on them for free.

Price monitoring

Watch all new products users see on sites like Amazon, and how their prices change over time.

Anker USB-C Charger, 65W
Apr 2 $162.00 —
Apr 9 $154.00 ↓ 5%
Today $142.00 ↓ 8%

Social analytics

Track follower counts and post performance on Instagram and LinkedIn over time. Build the engagement dataset the platforms won't hand you through an API.

followers 48.2k +3.1%
avg. likes 1,902 +8.0%
posts / wk 5 ·
@instagram/user @linkedin/user

Market research

Aggregate listings across a whole category to see real pricing, supply, and how fast inventory turns over, sourced from the same pages buyers actually see.

$1.2M
$940k
$710k
$480k
1,438 listings · median ₺ 820k

Observe changes to things real users see

No single page has the whole picture. A feed card gives you a handle and an avatar. A search result adds a follower count. The profile page fills in the rest. Each page your workers pass through reveals a different slice of the same entity.

Shoal keys every observation to its identity and merges them, so the record grows more complete the more angles it's seen from, with no extra requests and no duplicate rows.

0 fields · 0 vantage points · 1 record

You care about...

Bypassing advanced bot detection
IP rotation / warmup
Behavioral detection
Ethics
Geographic distribution
Speed
Automation

Headless + residential proxy

cat-and-mouse game
your problem
need to emulate real user behavior closely
you're probably using compromised machines
you can pay for the right pool
potentially quicker with the right
flexible enough to allow anything

Shoal

there are no bots to detect
as residential as any IP can get
they're already real users
data sharing is explicitly opt-in
~ depends on where your workers are
~ slower but steady
! no automated interactions

Shoal is exclusively for collecting data, so it can't click, scroll, submit forms, or trigger requests on a user's behalf.

The extension only reads data the user has already loaded by browsing normally, or optionally by opening a new iframe and reading the loaded data. Anything involving explicit interactions past that like commenting, upvotes, account creation, cannot be orchestrated.