# AI Page Extractor - Any Website to Structured Data (`plotpointtech/ai-page-extractor`) Actor

- **URL**: https://apify.com/plotpointtech/ai-page-extractor.md
- **Developed by:** [Plot Point Technologies](https://apify.com/plotpointtech) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 page extracted (standard)s

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AI Page Extractor

Turn any web page into clean, structured data by describing what you want in plain English. No CSS selectors, no code, no breaking when a site changes its layout.

### How it works

1. Paste one or more page URLs.
2. Write what you want, for example: *"Product name, price, stock status and SKU"* or *"Every event on the page with date, venue and ticket link"*.
3. Optionally name the exact output fields you want.
4. Run it. Each page comes back as JSON you can export to CSV, Excel, Google Sheets or your app.

### What people use it for

- **E-commerce:** product names, prices, variants, ratings and availability from store pages.
- **Lead lists:** company names, addresses, phone numbers and websites from business directories.
- **Events and listings:** dates, venues, prices and links from calendars and listing pages.
- **Research:** facts, tables and key figures pulled from articles, reports and Wikipedia.
- **AI agents and automations:** a reliable "read this page and give me fields" step for your workflows.

### Modes

| Mode | Best for | Page size handled |
|---|---|---|
| **Standard** | Most pages: products, listings, directories, articles | Up to about 60,000 characters of page text |
| **Accurate** | Messy or complex pages where precision matters | Up to about 15,000 characters of page text |
| **Your own key** | Heavy users with their own Anthropic API account | Same as the mode you choose |

Turn on **Page lists many items** for search results, catalogs and directories to get one record per entry on the page.

### Output

Each result includes the page URL, page title, status, and either `data` (one record per page) or `items` (one record per entry on a listing page). If a page could not be fetched or was empty, the result says so and you are not charged for AI extraction on it.

### Tips

- Be specific: "price as a number without the currency symbol" gets cleaner output than "price".
- Use **Output fields** when you need the same columns every time, such as for a spreadsheet.
- Values not on the page come back as `null`. The extractor is instructed never to invent data.

### Limitations

Pages are first downloaded directly, which is fast. If a page comes back nearly empty because it builds its content with JavaScript, the extractor automatically opens it in a real browser (setting "Render JavaScript": Auto). Set it to Always for sites you know need a browser. Sites that block automated access are not supported. Please respect each website's terms of use.

Built by Plot Point Technologies.

# Actor input Schema

## `startUrls` (type: `array`):

The pages to extract data from.

## `instructions` (type: `string`):

Describe in plain English what you want from each page, e.g. 'Product name, price, stock status and the first 200 characters of the description'.

## `fields` (type: `array`):

Name the exact columns you want, optionally with a hint after a colon, e.g. 'price: number only, no currency symbol'. Leave empty to let the AI choose.

## `multipleItemsPerPage` (type: `boolean`):

Turn on for listing pages (search results, catalogs, directories) to get one item per entry on the page.

## `mode` (type: `string`):

Standard is fast and cheap and handles most pages. Accurate uses a stronger model for complex or messy pages.

## `anthropicApiKey` (type: `string`):

Use your own key and pay a lower per-page price. Stored encrypted and never logged.

## `includePageText` (type: `boolean`):

Also return the cleaned page text with each result.

## `maxConcurrency` (type: `integer`):

How many pages to process in parallel.

## `renderJavaScript` (type: `string`):

Auto opens the page in a real browser only when the plain download comes back nearly empty. Always uses a browser for every page (slower). Never skips the browser.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
    }
  ],
  "instructions": "Book title, price, availability, star rating and UPC",
  "multipleItemsPerPage": false,
  "mode": "standard",
  "includePageText": false,
  "maxConcurrency": 5,
  "renderJavaScript": "auto"
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
        }
    ],
    "instructions": "Book title, price, availability, star rating and UPC"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plotpointtech/ai-page-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 = {
    "startUrls": [{ "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html" }],
    "instructions": "Book title, price, availability, star rating and UPC",
}

# Run the Actor and wait for it to finish
run = client.actor("plotpointtech/ai-page-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 '{
  "startUrls": [
    {
      "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
    }
  ],
  "instructions": "Book title, price, availability, star rating and UPC"
}' |
apify call plotpointtech/ai-page-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plotpointtech/ai-page-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/sgQ5QlluutHOmeivA/builds/5hWy6Rfoqxzv2IAyg/openapi.json
