# Table & Chart Data Extractor - Convert to CSV (`ntriqpro/table-chart-extractor`) Actor

Extract data from images of tables and charts. Convert visualizations to spreadsheets and CSV.

- **URL**: https://apify.com/ntriqpro/table-chart-extractor.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** AI, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$150.00 / 1,000 data extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Table, Chart & Form Extractor

Extract structured data from tables, charts, and forms in document images using AI vision analysis.

### Overview

This Actor analyzes document images and automatically extracts:

- **Tables** — Column headers, rows, and captions as structured arrays
- **Charts** — Chart type, title, axis labels, data points, and summaries
- **Forms** — Field names, values, and field types (text, number, date, checkbox, select)

Perfect for processing invoices, financial reports, surveys, datasheets, data visualizations, and application forms.

### Features

- **Local AI Processing** — Uses Qwen2.5-VL vision model running locally (no cloud APIs)
- **Batch Processing** — Process up to 20 images per run
- **Structured Output** — JSON format with confidence scores
- **Error Handling** — Graceful failures with detailed error codes
- **Production Ready** — Timeout protection, validation, retry logic

### Input

Provide either a single image or array of images:

#### Single Image

```json
{
  "imageUrl": "https://example.com/document.png"
}
```

#### Batch Processing

```json
{
  "imageUrls": [
    "https://example.com/doc1.png",
    "https://example.com/doc2.jpg",
    "https://example.com/doc3.webp"
  ],
  "maxUrls": 20
}
```

### Output

Each result contains:

```json
{
  "imageUrl": "https://example.com/document.png",
  "status": "success",
  "contentType": "table|chart|form|mixed|unknown",
  "tables": [
    {
      "headers": ["Column 1", "Column 2", "Column 3"],
      "rows": [
        ["Row1Col1", "Row1Col2", "Row1Col3"],
        ["Row2Col1", "Row2Col2", "Row2Col3"]
      ],
      "caption": "Table title or description"
    }
  ],
  "charts": [
    {
      "chartType": "bar|line|pie|scatter|other",
      "title": "Chart Title",
      "xAxis": "X-axis Label",
      "yAxis": "Y-axis Label",
      "dataPoints": [
        {"label": "Q1", "value": "100"},
        {"label": "Q2", "value": "150"}
      ],
      "summary": "What this chart shows"
    }
  ],
  "forms": [
    {
      "fields": [
        {"fieldName": "Name", "fieldValue": "John Doe", "fieldType": "text"},
        {"fieldName": "Age", "fieldValue": "30", "fieldType": "number"},
        {"fieldName": "Agreement", "fieldValue": "checked", "fieldType": "checkbox"}
      ]
    }
  ],
  "rawText": "All text content from the image",
  "confidence": 0.95,
  "model": "Qwen2.5-VL",
  "processingTimeMs": 1500
}
```

#### Error Response

```json
{
  "imageUrl": "https://example.com/document.png",
  "status": "error",
  "error": "AI service request timeout (30000ms)",
  "code": "TIMEOUT|INVALID_URL|INVALID_INPUT|API_ERROR|PROCESSING_ERROR",
  "processingTimeMs": 30100
}
```

### Pricing

**$0.15 per extraction**

Charged only on successful extraction. Errors are not charged.

### Quality Assurance

#### Best Results With

- High-resolution images (≥ 300 DPI)
- Clear, well-lit documents
- Standard table layouts
- Legible charts and forms

#### Limitations

- Complex nested tables may show reduced accuracy
- Handwritten forms may be less accurate than printed
- Artistic or stylized charts may require manual verification
- Images with overlapping elements may yield incomplete extraction

### Legal Notice

#### Document Source Responsibility (IMPORTANT)

- You are solely responsible for ensuring you have the right to process uploaded documents.
- Permitted sources:
  - Documents you own or created
  - Public government filings (SEC EDGAR, USPTO patents, etc.)
  - Open access publications (CC-BY, CC0 licensed)
  - Documents you are licensed to analyze
- Prohibited sources:
  - Confidential or trade secret documents belonging to third parties
  - Documents containing insider information (pre-publication financial data)
  - Medical records or health insurance data (HIPAA protected)
  - Credit reports or financial records with personal data (FCRA/GDPR protected)

#### Copyright

- Extracted data from copyrighted documents may not be redistributed or sold commercially without the copyright holder's permission.
- Government public filings (SEC, USPTO) are generally in the public domain.
- Corporate annual reports and research publications are copyrighted; extraction for personal analysis may qualify as fair use, but commercial redistribution likely does not.

#### Accuracy & Liability

- Extraction accuracy depends on image quality and document complexity.
- All extracted data should be verified before use in financial, legal, or business decisions.
- This tool does not provide financial analysis, investment advice, or legal counsel.
- The developer assumes no liability for decisions made based on extracted data.

#### Data Processing

- Documents are processed on our local AI server and immediately discarded.
- No documents are stored, cached, or shared with third parties.
- We do not retain extracted data beyond delivering results to your Apify dataset.

### Examples

#### Extract Invoice Table

```bash
curl -X POST https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/invoice.png"
  }'
```

#### Batch Extract Multiple Reports

```bash
curl -X POST https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrls": [
      "https://example.com/report1.jpg",
      "https://example.com/report2.jpg",
      "https://example.com/survey.png"
    ],
    "maxUrls": 20
  }'
```

### Support

For issues or feature requests, contact support.

### License

See LICENSE file for terms.

***

### 🔗 Related Actors by ntriqpro

Extend this actor with the ntriqpro intelligence network:

- [**video-intelligence-analyzer**](https://apify.com/ntriqpro/video-intelligence-analyzer) — Video/image AI analyzer (transcripts, scenes, objects)
- [**vehicle-damage-assessment**](https://apify.com/ntriqpro/vehicle-damage-assessment) — Vehicle damage AI assessment
- [**image-batch-optimizer**](https://apify.com/ntriqpro/image-batch-optimizer) — Bulk image optimization (resize/compress)

### ⭐ Love it? Leave a Review

Your rating helps professionals discover this actor. [Rate it here](https://apify.com/ntriqpro/table-chart-extractor/reviews).

# Actor input Schema

## `imageUrl` (type: `string`):

URL to a document image containing table, chart, or form

## `imageUrls` (type: `array`):

Array of URLs for batch processing (max 20)

## `maxUrls` (type: `integer`):

Maximum number of URLs to process

## Actor input object example

```json
{
  "imageUrl": "https://picsum.photos/id/24/600/400",
  "maxUrls": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "imageUrl": "https://picsum.photos/id/24/600/400",
    "maxUrls": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/table-chart-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "imageUrl": "https://picsum.photos/id/24/600/400",
    "maxUrls": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/table-chart-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "imageUrl": "https://picsum.photos/id/24/600/400",
  "maxUrls": 20
}' |
apify call ntriqpro/table-chart-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ntriqpro/table-chart-extractor"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/loSVi7kwY6MwZNt03/builds/Io18Sd7VS3V9bDv6t/openapi.json
