No-Code CSS Selector Web Scraper — URL + Field Map to JSON avatar

No-Code CSS Selector Web Scraper — URL + Field Map to JSON

Pricing

from $1.00 / 1,000 results

Go to Apify Store
No-Code CSS Selector Web Scraper — URL + Field Map to JSON

No-Code CSS Selector Web Scraper — URL + Field Map to JSON

No-code web scraper with CSS selectors: give start URLs and a field map (CSS or XPath, attribute, regex, type) and get structured rows with pagination and detail pages. Export JSON, CSV, Excel. From $1 per 1,000 results.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Alexandre Manguis

Alexandre Manguis

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

10 days ago

Last modified

Share

No Code Web Scraper CSS Selector — URL + Field Map to JSON

What does this Actor do?

This no code web scraper CSS selector tool turns any public, server-rendered web page into structured data. You give it start URLs and a field map (a field name → a CSS or XPath selector, plus optional attribute, regex and type). It returns one clean JSON row per item, and can follow "next page" links or a page-URL pattern, and open each item's detail page for extra fields. No code and no custom page function to write. Results can be exported as JSON, CSV, Excel, XML or HTML from the Apify dataset.

Use cases

  • Marketers and analysts who need a product, listing or directory table from a site without writing a scraper.
  • Developers who want a quick, declarative extractor they can call from an API or an automation tool.
  • Price monitoring, catalogue extraction, quote/article lists, job or event listings, directory pages.
  • Prototyping selectors on a single page before building something bigger.

Features

What you can configure

  • Field map: CSS selectors (or XPath when the selector starts with /), extract text, html or an attribute.
  • Cleaning: optional regex (first capture group) and type conversion: string, number, integer, boolean, url (made absolute).
  • Multiple values: all: true returns a list (for example all tags of an item).
  • Pagination: a "next page" CSS selector, or a URL pattern containing {page}, limited by maxPages.
  • Detail pages: follow a link inside each item and read extra fields from the detail page.
  • Missing-field report: each row lists missingFields; a SELECTOR_REPORT record gives hints when a selector matches nothing.
  • Polite by default: configurable delay between requests, maxResults cap, optional Apify Proxy.
  • Public pages only: Cookie and Authorization headers and private/local hosts are refused.

Limitations

  • It reads the HTML the server sends. Pages that build their content with JavaScript are not supported.

Input

Input fields

FieldRequiredDescription
startUrlsyesPublic http(s) pages to scrape.
fieldsyesList of {name, selector, extract, attribute, regex, type, all, selectorType}. Evaluated inside each item.
itemSelectornoCSS selector of each repeated item. Empty = each page is one item.
nextPageSelectornoCSS selector of the "next page" link.
pageUrlPatternnoURL with {page}, used from page 2; stops at the first empty page.
maxPagesnoPages per start URL (default 5).
detailLinkSelectornoLink inside each item to open as a detail page. Needs detailFields.
detailFieldsnoFields read on the detail page (names must differ from fields).
maxResultsnoStop after this many rows (default 100). Also caps your spending.
requestDelayMsnoDelay between requests to the same site (default 300).
headersnoExtra HTTP headers (for example Accept-Language).
proxyConfigurationnoOnly needed if the site blocks direct requests (403/429).

Input example

List page with pagination and detail pages:

{
"startUrls": [{ "url": "https://books.toscrape.com/catalogue/category/books/travel_2/index.html" }],
"itemSelector": "article.product_pod",
"fields": [
{ "name": "title", "selector": "h3 a", "extract": "attr", "attribute": "title" },
{ "name": "price", "selector": ".price_color", "regex": "([0-9.]+)", "type": "number" },
{ "name": "url", "selector": "h3 a", "extract": "attr", "attribute": "href", "type": "url" }
],
"nextPageSelector": "li.next a",
"maxPages": 3,
"detailLinkSelector": "h3 a",
"detailFields": [
{ "name": "upc", "selector": "//th[text()='UPC']/following-sibling::td", "selectorType": "xpath" },
{ "name": "availability", "selector": "p.availability", "regex": "(\\d+) available", "type": "integer" },
{ "name": "description", "selector": "#product_description ~ p" }
],
"maxResults": 45
}

Output

Output example

Each row contains your own field names (list fields and detail fields), plus the metadata fields pageUrl, pageNumber, itemIndex, missingFields and scrapedAt (and detailUrl when detail pages are used). Short sample from the books.toscrape.com test site (values shortened):

{
"title": "It's Only the Himalayas",
"price": 45.17,
"url": "https://books.toscrape.com/catalogue/its-only-the-himalayas_981/index.html",
"upc": "<upc>",
"availability": 19,
"description": "<description text>",
"detailUrl": "https://books.toscrape.com/catalogue/its-only-the-himalayas_981/index.html",
"pageUrl": "https://books.toscrape.com/catalogue/category/books/travel_2/index.html",
"pageNumber": 1,
"itemIndex": 0,
"missingFields": [],
"scrapedAt": "2026-10-04T18:12:36.799Z"
}

Output fields & fill rates

Measured on a 44-row test run (two category pages, pagination + detail pages) on books.toscrape.com. Fill rates depend on your selectors and on the target site.

FieldFill rate
title, price, url100%
upc, availability, description (detail page)100%
detailUrl100%
pageUrl, pageNumber, itemIndex, scrapedAt100%
missingFields (rows with at least one missing field)0%

Other proof runs:

  • URL pattern pagination (quotes.toscrape.com, all: true): 35 rows; tags was filled on 97.1% of rows (a quote without tags yields an empty list and is flagged in missingFields).
  • Single page, no itemSelector: 2 start URLs gave 2 rows; a selector that matches nothing returns null and is listed in missingFields.
  • Selector that matches nothing: the run succeeds with 0 rows and writes a SELECTOR_REPORT record with hints.
  • Empty input: rejected with an "input is not valid" error (startUrls is required).

Configuration

  • Selectors: CSS by default; a selector starting with / (or selectorType: "xpath") is XPath. Selectors in fields run inside each item; selectors in detailFields run on the whole detail page.
  • Pagination: use either nextPageSelector or pageUrlPattern (with {page}), bounded by maxPages.
  • Cost control: maxResults (default 100) stops the run after that many rows.
  • Politeness / blocking: requestDelayMs (default 300 ms); enable proxyConfiguration only if the site answers 403/429.
  • Headers: headers for things like Accept-Language; Cookie and Authorization are refused.

How to use via API

Replace YOUR_API_TOKEN and ACTOR_ID (find it on the Actor page).

curl

curl -X POST "https://api.apify.com/v2/acts/ACTOR_ID/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://quotes.toscrape.com/"}],
"itemSelector": "div.quote",
"fields": [
{"name": "text", "selector": "span.text"},
{"name": "author", "selector": "small.author"},
{"name": "tags", "selector": "a.tag", "all": true}
],
"pageUrlPattern": "https://quotes.toscrape.com/page/{page}/",
"maxPages": 4,
"maxResults": 35
}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('ACTOR_ID').call({
startUrls: [{ url: 'https://quotes.toscrape.com/' }],
itemSelector: 'div.quote',
fields: [
{ name: 'text', selector: 'span.text' },
{ name: 'author', selector: 'small.author' },
{ name: 'tags', selector: 'a.tag', all: true },
],
pageUrlPattern: 'https://quotes.toscrape.com/page/{page}/',
maxPages: 4,
maxResults: 35,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ACTOR_ID").call(run_input={
"startUrls": [{"url": "https://quotes.toscrape.com/"}],
"itemSelector": "div.quote",
"fields": [
{"name": "text", "selector": "span.text"},
{"name": "author", "selector": "small.author"},
{"name": "tags", "selector": "a.tag", "all": True},
],
"pageUrlPattern": "https://quotes.toscrape.com/page/{page}/",
"maxPages": 4,
"maxResults": 35,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items))

Pricing

Pay per result (pay-per-event): you are charged for each row written to the dataset. Price per 1,000 results depends on your Apify plan:

PlanPer 1,000 results
Free$1.50
Bronze$1.30
Silver$1.15
Gold and above$1.00

Platform usage (compute) is billed by Apify separately; in the test runs it was small (the 44-row run used about $0.017 of platform usage). Set maxResults to cap your spending.

Troubleshooting

  • 0 results: open the SELECTOR_REPORT record in the run's key-value store. Check that itemSelector and the field selectors match the HTML the server sends (view-source, not the browser inspector).
  • Fields are null: the selector matched nothing inside the item; see missingFields. Remember selectors are evaluated inside each item.
  • Page needs JavaScript: not supported; this Actor reads server-rendered HTML only.
  • HTTP 403/429: enable Apify Proxy in proxyConfiguration and raise requestDelayMs.
  • Input error: a field needs name and selector; extract: "attr" needs attribute; detailFields and detailLinkSelector go together; field names must be unique and not reserved.

FAQ

Do I need to code?

No. You write selectors in JSON; no page function.

Can I use XPath?

Yes: a selector starting with / is treated as XPath, or set selectorType: "xpath".

Can I scrape pages behind a login?

No. Public pages only; Cookie and Authorization headers are refused.

Scrape only public data you are allowed to use, respect the site's terms and robots.txt, and handle any personal data in line with GDPR.

Keywords

no code web scraper, css selector scraper, web scraper css selector, xpath scraper, html to json, website to json, extract data from website, pagination scraper, scrape product listings, structured data extraction, no-code data extraction

Hashtags

#webscraping #nocode #cssselector #xpath #htmltojson #dataextraction #scraper #automation #apify