What we store, and where
To detect records, walk every page, and let a crawl resume after a browser restart, PageScrape saves your work locally in your own browser profile:
- IndexedDB — your scrape jobs: the starting URL you entered, the detected columns, the pagination scheme, and the rows collected so far. This is what makes a run resumable and stops a failed export from losing your data.
- Extension storage (
chrome.storage) — small job/settings state, including your optional AI-booster preferences if you enable them.
All of this is on-device. It is never synced to a PageScrape account, because there is no PageScrape account and no PageScrape server. Your scraped tables persist until you delete them or clear the extension's data.
What leaves your browser
PageScrape is a scraper, so — unlike a purely offline tool — it does make network requests. We want to be precise about which ones:
- The pages you ask it to scrape. When you paste a starting URL and run a crawl, PageScrape fetches that page and the subsequent pages of the same listing, directly from your browser. It fetches only the source you provide and the pages its pagination leads to — nothing else. These requests go to those websites, not to us.
- Your exports. A scraped table leaves your device only when you click Export (
.xlsx/.csv) or copy to clipboard. The file is written wherever you choose. Where it goes after that is up to you. - Optional AI booster (off by default). If — and only if — you switch on the bring-your-own-key AI cleanup, the specific columns you choose to tidy are sent to the AI provider you select (Anthropic, OpenAI, or Google), authenticated with your own API key. PageScrape never adds a key of its own, never sends anything you did not select, and never fires the booster unless you ask. A live cost meter shows every token and dollar. This is a request between you and your chosen provider under their terms; PageScrape is not in the middle collecting it.
That is the complete list. There are no other outbound connections — no telemetry pings, no update beacons, no analytics calls.
Permissions, and why each is needed
| Permission | Why PageScrape asks for it |
|---|---|
host_permissions | Required to fetch the pages you ask PageScrape to scrape. A scraper cannot read a listing without permission to load its pages; nothing is fetched except the source you provide and the pages its pagination leads to. |
sidePanel | The entire interface — URL input, preview table, live results, and export — lives in the browser side panel. |
storage | Saves your scrape jobs, detected columns, and collected rows locally so a crawl is resumable across browser restarts. |
offscreen | Parses fetched page HTML in an offscreen document (the service worker has no DOM) to detect records and extract rows. This runs locally, in your browser. |
No analytics, no tracking, no sale
- No account, no sign-in, no user profiles.
- No analytics, telemetry, crash reporting, advertising, or tracking of any kind.
- No PageScrape backend to receive your data — we operate no server that your scrapes touch.
- We do not sell, share, or transfer your data to third parties; we do not use it for creditworthiness, and we do not use it for any purpose unrelated to running the scrape you asked for. There is nothing collected on our side to sell.
- No remotely-loaded code — the extension runs entirely from the code shipped in its package.
Children's privacy
PageScrape is a general-purpose tool and is not directed at children. It collects no personal information from anyone.
Changes to this policy
If this policy changes, the "Last updated" date above will change and the updated version will be posted at this URL.
Contact
Questions about privacy? Email shaunpeh@gmail.com.