Skip to content

About

ASOS product scraper for Python and the command line: ASOS search results with name, brand, price, was-price, discount, colourway, markdown and selling-fast flags and images, as JSON or CSV. Free and open source; sign in with your QuanticData account, no proxies or headless browser to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

ASOS Product Scraper

ci python license dependencies

Scrape ASOS product data from Python or the command line: search results with the product name, brand, current and was-price, discount, colourway, ASOS's own flags (marked down, outlet, selling fast, new in) and images, as JSON or CSV. The code is free and open source (MIT). It runs on the QuanticData Data API, so there are no proxies to rotate and no headless browser to keep alive: sign in once and run a command.

pip install git+https://github.com/quantumproxies/asos-scraper
asos-scraper login
asos-scraper search "white sneakers" --max-results 48 -o white_sneakers.csv

login opens the QuanticData sign-in page in your browser. New accounts get $2 of free usage every month, no card required: create one.

What it scrapes

Command Input Returns Per run
asos-scraper search keyword Name, brand, price, was-price, colour, image, 28 fields per row (fields and price) up to 300

Searches run on the ASOS US store, so prices are in USD. product_id is the id in the /prd/ product URL, other_colour_ids lists the same style in other colours, and lowest_price_30d is the lowest price of the last 30 days when ASOS states one.

Sample output

A real row from asos-scraper search "white sneakers" --max-results 3 (2026-10-23):

{
  "rrp": null,
  "url": "https://www.asos.com/new-balance/new-balance-204l-suede-sneakers-in-off-white/prd/210982370#colourWayId-210982372",
  "name": "New Balance 204L suede sneakers in off white",
  "rank": 1,
  "brand": "New Balance",
  "image": "https://images.asos-media.com/products/new-balance-204l-suede-sneakers-in-off-white/210982370-1-cream",
  "price": 90,
  "colour": "CREAM",
  "images": [
    "https://images.asos-media.com/products/new-balance-204l-suede-sneakers-in-off-white/210982370-1-cream",
    "https://images.asos-media.com/products/new-balance-204l-suede-sneakers-in-off-white/210982370-2"
  ],
  "is_new": false,
  "currency": "USD",
  "is_outlet": false,
  "video_url": null,
  "price_text": "$90.00",
  "product_id": "210982370",
  "discount_pct": 25,
  "is_promotion": false,
  "is_sponsored": false,
  "product_code": "157492130",
  "colour_way_id": "210982372",
  "is_marked_down": true,
  "original_price": 119.99,
  "is_selling_fast": true,
  "lowest_price_30d": 90,
  "other_colour_ids": [],
  "is_restocking_soon": false,
  "has_multiple_prices": false,
  "has_variant_colours": false
}

Python

from quanticdata_asos_scraper import AsosScraper

asos = AsosScraper()  # saved login, or QUANTICDATA_API_KEY

sneakers = asos.search("white sneakers", max_results=48)
for p in sneakers:
    print(p["product_id"], p["brand"], p["price"], p["original_price"], p["discount_pct"], p["name"])
sneakers.to_csv("white_sneakers.csv")

dresses = asos.search("dress", max_results=300)
marked_down = [p for p in dresses if p["is_marked_down"]]
print(f"{len(marked_down)} of {len(dresses)} dresses are marked down")

Each call returns a Run: iterate it for the rows (plain dicts), take len(), or save it with to_csv(), to_json(), to_jsonl() or to_dataframe() (pandas). Errors are specific: InsufficientCredit, RateLimited, InvalidInput, JobFailed, AuthError.

Examples

  • Markdown tracking: Check a query every day and log which products are marked down, by how much, and which are selling fast. See examples/markdown_tracker.py.
  • Brand mix of a category: Search a category and see how many products each brand has, its median price and its share of marked-down items. See examples/brand_mix.py.
  • Assortment export: Run a list of queries and get one CSV with every product, colourway, price and flags. See examples/search_to_csv.py.

Command line

Results print as a table; -o file.csv, -o file.json or -o file.jsonl writes a file. List inputs take a b c, a,b,c, @file.txt (one per line) or - (stdin). --no-wait starts a long run in the background and prints its id; asos-scraper run <id> -o out.csv collects it later.

asos-scraper search

Product search on ASOS — name, brand, price, was-price, colour, image.

asos-scraper search QUERY [options]
Option Type Default Description
QUERY string What to search, e.g. "dress".
--max-results integer 24 How many products to deliver at most (1–300). You pay only for delivered products.

Output fields

asos-scraper search: 28 fields
Field Type Description
rank integer 1-based position in ASOS's ordering for this response.
product_id string ASOS product id — the id that keys the /prd/ page.
product_code string or null ASOS internal product code (does not key the URL).
name string Product name.
brand string or null Brand name.
colour string or null Colourway as ASOS states it — its own casing is inconsistent ("PINK", "Chocolate").
colour_way_id string or null ASOS colourway id (the #colourWayId fragment on the URL).
price number or null Current price (USD).
price_text string or null Current price as ASOS formats it ("$52.00").
original_price number or null Struck-through was-price (USD); null when not reduced.
rrp number or null Recommended retail price (USD) when ASOS states one.
currency string Currency of the prices: USD, from the ASOS US store.
discount_pct integer or null Percent off the was-price; null unless both prices are stated.
is_marked_down boolean ASOS's own markdown flag.
is_outlet boolean Outlet pricing.
is_selling_fast boolean ASOS's low-stock badge.
is_new boolean ASOS's "New in" flag.
is_sponsored boolean Paid placement (ASOS keeps these out of the product list; false on every organic row).
url string or null Product URL.
image string or null Primary product image.
images string[] Gallery image URLs (main image first).
video_url string or null Catwalk video URL when the product has one.
lowest_price_30d number or null Lowest price in the last 30 days when ASOS states it.
has_variant_colours boolean True when the product page offers other colours.
has_multiple_prices boolean True when sizes or variants are priced differently.
is_restocking_soon boolean True when ASOS marks the product as restocking soon.
is_promotion boolean True when the product is in a promotion.
other_colour_ids string[] Product ids of the same style in other colours.

Sign-in and API keys

  • asos-scraper login signs you in with OAuth 2.1 and PKCE in the browser. The token is stored in ~/.config/quanticdata/credentials.json (readable only by you) and refreshed automatically. One login serves every QuanticData tool on the machine.
  • No browser on the machine (SSH, Docker, Colab): run asos-scraper login --no-browser, open the link anywhere, then paste back the address the browser ends on.
  • Scripts and CI: set QUANTICDATA_API_KEY to a key from the dashboard, or store one with asos-scraper login --api-key.
  • asos-scraper logout revokes the token. The connection is listed under API keys in the dashboard as "API · QuanticData CLI"; deleting that key disconnects every machine that uses it.

Pricing

The code is free and MIT-licensed. Runs are billed to your QuanticData account per delivered row, at the price shown on each collector page linked above; $2 of usage is free every month and failed runs are never billed. Plans with higher limits: pricing.

Other ways to call it

The same data over plain HTTP:

curl -X POST https://api.quanticdata.io/v1/scraper/collectors/asos_search/run \
  -H "Authorization: Bearer $QUANTICDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": {"query": "white sneakers", "max_results": 3}}'
  • API reference with Python, Node, PHP and curl examples.
  • MCP server to give Claude, Cursor or any MCP client the same tools.
  • n8n node for no-code workflows.

FAQ

Is this ASOS scraper free?

The code is free and MIT-licensed. Scraping runs on your QuanticData account: $2 of usage is free every month with no card, then you pay per delivered row at the price shown on each collector page. Failed runs are never billed.

Do I need proxies or a headless browser?

No. You send a keyword and get rows back; the requests run on QuanticData's side.

Which ASOS store and currency?

The ASOS US store. Prices come back in USD, and every row carries the currency code next to the price.

How many products can one run return?

Up to 300 products per run; ask for fewer with --max-results and you pay only for what is delivered.

Can I export to CSV or Excel?

Add -o results.csv (or .json, .jsonl). Lists such as the image gallery and the other colour ids are joined with '; ', so the CSV opens cleanly in Excel or Google Sheets.

Can I run it on a schedule?

Yes. Set QUANTICDATA_API_KEY in the environment and call the CLI or examples/markdown_tracker.py from cron, GitHub Actions or any scheduler.

Related scrapers

License

MIT. Built and maintained by QuanticData.

About

ASOS product scraper for Python and the command line: ASOS search results with name, brand, price, was-price, discount, colourway, markdown and selling-fast flags and images, as JSON or CSV. Free and open source; sign in with your QuanticData account, no proxies or headless browser to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages