ForHosting KIT · Web Scraping & Monitoring

Web table to CSV

Some of the best data on the internet is still trapped in an HTML table with no download button: a pricing grid, a government dataset, a sports schedule, a stock table refreshed nightly. This endpoint scrapes those tables straight into CSV, columns and headers intact, ready to drop into a spreadsheet or a database.

● StablePer request + per URL$0.040
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

The gap between 'visible' and 'usable' data

An HTML table renders beautifully in a browser and is almost useless everywhere else: copy-pasting from a page mangles the columns, breaks merged cells, and drags in ads or footnotes you never wanted. Analysts, researchers and finance teams routinely need that same data in a spreadsheet, and until now the only options were a manual copy job or a custom scraper written just for that one site, an approach that breaks the moment the site's markup changes even slightly.

How the extraction works

Submit one or more URLs and this endpoint locates the table (or tables) on each page, reads header rows to label columns correctly, and converts the result to CSV, preserving row order and handling the awkward cases that trip up naive scrapers, like colspan headers or tables built with nested divs instead of proper markup. The call returns a task_id immediately, and the finished CSV arrives by webhook, or through a signed link kept valid for 24 hours, without you needing to keep a connection open while the extraction runs.

A format with history behind it

The HTML table element predates CSS layout entirely; before flexbox and grid, tables were how the web laid out pages, and remnants of that era still show up as data tables with inconsistent structure. CSV, on the other hand, has been the lowest common denominator for tabular data since long before the web existed, which is exactly why it's still the target every spreadsheet, database and BI tool understands without a plugin.

Built for batches, not one-off copies

Because pricing is per URL on top of the base request, this is designed to run across dozens or hundreds of pages in one call, useful for tracking a competitor's pricing table over time, compiling a public dataset spread across many pages, or turning an entire archive of report pages into one clean data pipeline feeding a warehouse. The cost stays predictable at any scale, since it's a fixed base plus a fixed per-URL rate rather than a variable charge tied to table size.

Competitor pricing pages

Pull pricing tables from multiple competitor sites on a schedule and compare them as structured rows instead of screenshots.

Public dataset compilation

Turn a government or research site's paginated tables into a single CSV ready for analysis, without hand-copying each page.

Schedule and roster tracking

Extract event schedules, standings or rosters published only as an HTML table on a league or venue website.

Financial reporting archives

Convert historical filings or rate tables published as web pages into CSV for a finance team's spreadsheet models.

How do I extract a table from a website with this API?

POST the URL (or a list of URLs) to /web/tables; you get a task_id right away and the CSV output arrives by webhook or a signed link once processing finishes.

Is this table extraction API free?

There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.

What output format do I get?

The result is CSV with header rows correctly labeled as columns, ready to open in a spreadsheet or load into a database.

Can it handle a page with multiple tables?

Yes, each table found on a page is captured and returned distinctly rather than merged together.

Does it work on tables built without proper HTML table markup?

It's built to read genuine table structures reliably; pages that fake a table purely with div layout may extract less cleanly than standard markup.

Can I extract tables from many URLs in bulk?

Yes, submit a list of URLs in one call and pay the per-URL rate on top of the base request price.

How do I receive the extracted CSV?

Choose a signed webhook for automatic delivery or fetch the CSV from a signed link, valid for 24 hours after the task completes.

Is my extracted data kept or used for training?

No. Data is deleted after the retention window and is never used to train any model.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/web/tables

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/web/tables \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://ejemplo.com"}'
{
  "url": "https://ejemplo.com"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "web.tables",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.040
Per URL$0.001

Published price — no tokens, no invented credits. A failed task is never charged.

timeout_sec30
max_crawl_pages25
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.
422task_failedThe task failed after 3 retries. You are never charged for it.

Read the full KIT documentation →