American Eagle & Aerie Scraper: Prices and Sizes
Pricing
from $1.20 / 1,000 products
American Eagle & Aerie Scraper: Prices and Sizes
Scrape ae.com (American Eagle and Aerie, US store) into one clean row per product colour. Get list and sale prices, discount percent, clearance flags, colour variants, images and per-size data from category URLs, product URLs or the full catalogue. Export to JSON, CSV or Excel.
Pricing
from $1.20 / 1,000 products
Rating
0.0
(0)
Developer
MrBridge
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Features
Share
American Eagle Scraper
American Eagle Scraper reads product data from ae.com, the US store of American Eagle and Aerie, and returns one clean row per product colour. Give it category or product URLs, or let it read the whole product sitemap, and get names, list and sale prices, discount percent, clearance and sold-out flags, colour variants, images and sizes. Export to JSON, CSV or Excel, with no API key and no HTML parsing on your side.
Status: validated on the Apify platform. A 15-product run usually takes under 30 seconds, a category of 184 products about 65 seconds, and the whole catalogue (9,505 products) about 17 minutes. See How long does a run take?.
Paste a category URL such as https://www.ae.com/us/en/c/women/bottoms/jeans/cat6430042 and get back one row for every colour of every jean on the page, each with its list price, sale price, discount percent and per-size prices. Run it on a schedule and you have a price and markdown tracker for a whole department.
What is American Eagle Scraper?
American Eagle Scraper turns ae.com category pages, product pages or the full product catalogue into a structured Apify dataset. It covers both brands sold on ae.com, American Eagle and Aerie, and the brand field tells them apart (AE, Aerie and OFFLINE). The only source it reads is the US English store (us/en).
American Eagle Scraper supports the following:
- Scrape categories: a category URL expands to every product colour listed in it. The Actor reads the category listing page by page (30 products per page) until
maxProductsis reached. - Scrape single products: a product URL returns the row of that colour.
- Read the full catalogue: switch on
fullCatalogueto read the US product sitemap, 9,510 product pages on 2026-10-28. - One row per colour: the same style in three colours gives three rows, linked by
styleIdandcolorVariants. - Price and markdown data: list price, sale price, discount percent and the clearance flag on every row.
- Sizes by default: size label, size code, SKU, prices and the stock level code of each size.
includeSizesis on unless you switch it off. - Description on request: description, detail lines, material and care lines, and fit lines.
What data can I extract with American Eagle Scraper?
| Group | Example fields |
|---|---|
| Identity | productId, styleId, colorId, name, brand, gender, colorName, url |
| Prices | currency, listPrice, salePrice, discountPercent |
| Status | isClearance, isSoldOut, onlineOnly, badges, marketingMessage, promotions |
| Catalogue | categoryPath, colorVariants, images |
| Sizes (optional) | sizes[] with size, sizeCode, skuId, listPrice, salePrice, stockLevel |
| Description (optional) | description, details, materials, fit |
| Run metadata | locale, sourceUrl, scrapedAt |
Where does the data come from?
Each product row is built from the public product data that ae.com loads in the browser. No account and no credentials are required on your side. The Actor asks for that data first. If a request is blocked, it retries, and as a last resort it reads the product page. This page fallback is capped at 5% of the products started in the run, and never below 20 pages. Past the cap the run stops cleanly instead of reading a whole catalogue the slow way. The OUTPUT record tells you how many rows came from each source. On the full catalogue run, 99.9% of the rows came from the product data and 0.08% from the page fallback.
How can I use data scraped from ae.com?
- Price monitoring: track the list and sale price of a category from one run to the next and see which items moved.
- Markdown tracking: follow
discountPercentandisClearanceto spot when a style goes on sale and how deep the discount goes. - Resellers: check current prices, colours and sizes before buying stock or listing a product on a marketplace.
- Affiliates and deal sites: build product feeds with names, images, prices and links back to ae.com.
- Market research: compare assortments, price points and colour ranges across departments and brands.
How to use American Eagle Scraper
Here's how to use American Eagle Scraper in 5 steps:
- Create a free Apify account using your email.
- Open American Eagle Scraper.
- Add one or more category or product URLs to Start URLs, or switch on Full catalogue. Set Max products to cap the run.
- Click the Start button and wait for the data to be extracted.
- Download your data in JSON, XML, CSV, Excel or HTML.
How much will scraping ae.com cost you?
American Eagle Scraper uses a pay-per-event pricing model.
- Product: one event is charged for each product colour row saved to the dataset, with or without sizes and description.
- Actor Start: the standard Apify event, charged once for every run.
- Error rows are never charged. A row carrying
_error: trueis written to the separateerrorsdataset and does not trigger the Product event.
The product event costs 0.002 USD per product without discount, which is 2 USD for 1,000 products. Subscription tiers lower the price, down to 0.0012 USD per product. Prices can change, so check the Pricing tab for the current grid. At the undiscounted price, a full catalogue run of 9,505 products (the size measured on 2026-10-28) comes to about 19.01 USD.
You can cap the spend of any single run from the Apify Console with ACTOR_MAX_TOTAL_CHARGE_USD, and the maxProducts input gives you a hard limit on how many rows are saved and billed. When the cap is reached, the run stops cleanly and saves no further row.
⬇️ Input
The input is a JSON object that says where to read products from, plus a few options. See the Input tab for the full schema with all fields and defaults.
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | array | none | Product pages (https://www.ae.com/us/en/p/.../0000_0000_000, or the same link without /us/en, as https://www.ae.com/p/.../0000_0000_000, which is read as the /us/en/p/ form) or category pages (https://www.ae.com/us/en/c/.../cat0000000) of the US store. http: links are accepted. Ignored when fullCatalogue is on. |
fullCatalogue | boolean | false | Ignore startUrls and read the US product sitemap. maxProducts still applies: set it to about 10,000 to read the whole catalogue (9,510 sitemap pages on 2026-10-28). |
maxProducts | integer | 100 | Hard cap on the number of rows saved and billed in one run. Minimum 1. |
includeSizes | boolean | true | Add the sizes[] list to each row. |
includeDescription | boolean | false | Add description, details, materials and fit to each row. |
locale | string | us/en | Store locale. Only us/en is available. |
American Eagle Scraper input examples
Scrape a category. This is the prefilled example of the Input tab (a women's jeans category, 15 products):
{"startUrls": [{"url": "https://www.ae.com/us/en/c/women/bottoms/jeans/cat6430042"}],"maxProducts": 15}
Options you leave out take their defaults: includeSizes on, includeDescription off, fullCatalogue off, locale us/en.
Scrape the whole catalogue, without sizes, capped at 5,000 rows:
{"fullCatalogue": true,"maxProducts": 5000,"includeSizes": false}
Give either startUrls or fullCatalogue. A run with neither returns an error row and finishes without data. An invalid URL produces an error row for that URL and the run carries on with the others. A product that appears twice (in two categories, or in a category and in the start URLs) gives one row. Duplicate start URLs are counted in OUTPUT.duplicateStartUrls.
Calling the Actor from the API
Use apify-client for Node.js or Python to start a run and read the dataset. Python example:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("mrbridge/american-eagle-scraper").call(run_input={"startUrls": [{"url": "https://www.ae.com/us/en/c/women/bottoms/jeans/cat6430042"}],"maxProducts": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["colorName"], item["salePrice"])
⬆️ Output
American Eagle Scraper stores results in a dataset, one row per product colour. Optional keys follow the input: sizes is present only when includeSizes is on, and description, details, materials and fit only when includeDescription is on. When the site does not publish a value, the key is present with null.
Dataset views
The Output tab offers three views.
| View | What it shows |
|---|---|
overview | Name, colour, brand, gender, currency, list price, sale price, discount percent, clearance, sold out, URL |
prices | Product ID, name, colour, currency, list price, sale price, discount percent, clearance, badges, marketing message, scrape time |
sizes | Product ID, name, colour, sold out, and the sizes array |
Sample output
A real row from a product page, with every option on. It is generated by the Actor's own row mapping from a captured page of the Men's Clearance jackets, and shortened for this page: only the first entries of categoryPath, colorVariants, images, sizes, details, materials and fit are shown.
{"productId": "0101_1891_410","styleId": "0101_1891","colorId": "410","name": "AE x Umbro Warm-Up Jacket","brand": "AE","gender": "Men","colorName": "Navy","url": "https://www.ae.com/us/en/p/men/tops/jackets-coats/ae-x-umbro-warm-up-jacket/0101_1891_410","sourceUrl": "https://www.ae.com/us/en/c/men/jackets-coats/cat6430044","categoryPath": ["Men's Clearance","Tops","Jackets & Coats"],"currency": "USD","listPrice": 69.95,"salePrice": 27.98,"discountPercent": 60,"isClearance": true,"isSoldOut": false,"onlineOnly": false,"badges": ["realgood","onlyat"],"marketingMessage": "Limited-Edition Exclusive","promotions": [],"colorVariants": [{"productId": "0101_1891_600","colorName": "Red","url": "https://www.ae.com/us/en/p/men/clearance/tops/jackets-coats/ae-x-umbro-warm-up-jacket/0101_1891_600"},{"productId": "0101_1891_410","colorName": "Navy","url": "https://www.ae.com/us/en/p/men/clearance/tops/jackets-coats/ae-x-umbro-warm-up-jacket/0101_1891_410"}],"images": ["https://s7d2.scene7.com/is/image/aeo/0101_1891_410_l1","https://s7d2.scene7.com/is/image/aeo/0101_1891_410_of"],"locale": "us/en","scrapedAt": "2026-10-26T10:00:00.000Z","sizes": [{"size": "XS","sizeCode": "1000","skuId": "0044887271","listPrice": 69.95,"salePrice": 27.98,"stockLevel": 2},{"size": "S","sizeCode": "2000","skuId": "0044884732","listPrice": 69.95,"salePrice": 27.98,"stockLevel": 1},{"size": "M","sizeCode": "3000","skuId": "0044884740","listPrice": 69.95,"salePrice": 27.98,"stockLevel": 0}],"description": "Inspired by an archival warm-up jacket used for football training or warm-ups, this zip-up style features bold contrast taping, retro embroidery and side mesh pockets.","details": ["An exclusive collab for the players & the fans.","Crinkled nylon"],"materials": ["100% Nylon","Machine wash"],"fit": ["Classic fit & length"]}
Field notes
- One row per colour.
productIdis the colour-level identifier,styleIdis shared by all colours of a style, andcolorVariantslists the other colours. - Brand.
brandcarries the brand line of the product. The values areAE(American Eagle),AerieandOFFLINE(the "OFFLINE by Aerie" sub-brand, a normal product line), so all of them share one dataset and can be filtered on this field. - Prices.
listPriceis the regular price,salePricethe current price anddiscountPercentthe gap between them.currencyisUSD. - Sizes. Each entry of
sizes[]hassize,sizeCode,skuId,listPrice,salePriceandstockLevel.stockLevelis the site's stock code per size: 0 available, 2 unavailable, 1 low stock, sometimes still orderable, sometimes not. The Actor does not turn it into an availability flag. - Sold out.
isSoldOutis a flag for the whole product colour, not for a single size. - Description fields.
details,materialsandfitare arrays of strings, one entry per bullet of the product page. - Badges.
badgesholds the badge codes the site uses, as published.
Why a run stops
Every run ends as SUCCEEDED and writes an OUTPUT record in the default key-value store, with the reason it stopped in stoppedReason.
stoppedReason | Meaning |
|---|---|
completed | Every requested page was handled. |
maxProducts | The row cap was reached. The cap is reserved before each row is saved, so the dataset never holds more rows than maxProducts. |
chargeLimit | The maximum charge you set for the run was reached. The run stops cleanly and the rows saved so far are kept. |
deadline | The run reached its own time budget, one minute before the platform timeout, and stopped taking new work. |
fallbackCap | The product page fallback reached its cap (see above), so the run stopped. |
noToken | The Actor could not get access to the product data. It read at most 20 product pages directly and stopped. Each start URL left unread gets a TARGET_BLOCKED row in errors, and the run status message says why. |
aborted | The run was aborted from the Console or the API. |
badInput | The input was not usable. The reasons are in the errors dataset. |
localRunRefused | A local run without the offline fixtures. Nothing was requested. |
OUTPUT also holds rowsEmitted, rowsCharged (the product events billed according to the Apify platform, read from the run record at the end of the run, null when the run is not on Apify), chargeRequests (the charges the SDK accepted locally), droppedAfterStop (rows found after the charge cap stopped the run, neither saved nor billed), errorsByKind, requests, blockedRate, maxProducts, mode, rowsBySource (api and html), htmlFallbacks, duplicateStartUrls, duplicateProducts, sitemapProductIds (full catalogue only), categories and runErrors. Secrets are removed from every message before it is written.
The categories field
When you scrape a category, ae.com announces a number of products (totalProducts), and the pages then give a number of unique product ids (uniqueIds). The two can differ, because the live catalogue moves between two page requests. When the pages give fewer ids than announced, the Actor reads the category once more and merges the new ids (reread: true). A gap that remains after that single re-read is reported and accepted: it appears in OUTPUT.categories as { categoryId, totalProducts, uniqueIds, reread }, with a warning in the log and no row in the errors dataset. The array is empty when the pagination has no gap. Example from the validation run: category cat6430042 announced 186 products and gave 184 unique ids after the re-read.
Resume after a migration or a reboot
A resume after a platform migration or a reboot is designed to lose no row and bill no row twice: the Actor reads its own dataset at start-up and skips every product already saved. This was checked on the full catalogue run with a forced reboot in the middle. The restart found 26 rows pushed after the last state save and reconciled them, and the run ended with 9,505 rows for 9,505 distinct productId values. The one residual case is a row saved at the very moment a stop cut its charge: in the worst case that row is delivered without being billed. A product that had failed before the resume is tried again, so its error record can appear twice, while its row is saved once.
Errors dataset
Problems are written to a separate dataset named errors, never billed. Each record has _error: true, a kind, the url and productId when known, the HTTP status, the attempt number, a message and a timestamp.
kind | Meaning |
|---|---|
BAD_INPUT | A field or a URL of the input is not valid. |
TARGET_BLOCKED | The site blocked the request on every attempt, or the run stopped before this URL was read (see noToken and fallbackCap). |
SHOEBOX_MISSING | The product page was served without the product data. |
EXTRACTION_FAILED | The data was served but could not be turned into a row, or a sitemap was empty. |
TARGET_NOT_FOUND | The product does not exist any more (HTTP 404 or 410). Not for an OFFLINE product, which gives a normal row. |
Limits
- Only the US English store (
us/en) is covered. Other countries and languages are not available. - No customer reviews and no ratings.
- No size guide and no measurement charts.
- No store-level availability and no in-store stock.
- No price history. Each run is a snapshot, so schedule runs and keep the datasets if you want a history.
- Availability is limited to the product-level
isSoldOutflag and thestockLevelcode per size, whose meaning is given above. - Products of the OFFLINE sub-brand give a normal row with
brandset toOFFLINE.
More shopping and product data tools
- Amazon product data MCP: Amazon product search, live prices, offers, reviews and bestseller ranks in four stores.
- barcode nutrition lookup for AI: ingredients, allergens, Nutri-Score and nutrients for packaged food by barcode.
Frequently asked questions
Does it scrape Aerie as well as American Eagle?
Yes. ae.com sells both brands, and the rows of both come back in the same format. The brand field tells them apart (AE, Aerie and OFFLINE). There is no brand filter.
Why is there one row per colour and not per style?
Prices, images, badges and sold-out status can differ from one colour to the next. A row per colour keeps each of those values attached to the right item. Group by styleId to get one line per style.
Can I get the whole catalogue?
Yes. Set fullCatalogue to true and set maxProducts to about 10,000, which covers the 9,510 sitemap pages of 2026-10-28. The Actor reads the US product sitemap, which listed 9,510 product pages on 2026-10-28. The count changes as the site changes, and the Actor reads the sitemap at run time. On that date a full run saved 9,505 rows, which is every sitemap page except five gift cards that the site no longer serves (they give a TARGET_NOT_FOUND record in the errors dataset, which is not billed).
How long does a run take?
Measured on the Apify platform with 1,024 MB of memory:
| Run | Products | Duration |
|---|---|---|
Prefilled example (one jeans category, maxProducts 15) | 15 | usually under 30 seconds |
| One whole category | 184 | about 65 s (measured on the previous build, the current one is expected to be faster) |
| Full catalogue, with a forced reboot in the middle | 9,505 | about 17 minutes (1,039 s) |
Times depend on how the site answers and are not a guarantee. A long run also stops by itself one minute before the platform timeout (stoppedReason deadline).
Does stockLevel tell me how many items are left?
No. It is a raw code from the site, not a quantity. stockLevel is the site's stock code per size: 0 available, 2 unavailable, 1 low stock, sometimes still orderable, sometimes not.
Can I use American Eagle Scraper via MCP?
Yes. Any Apify Actor can be called from an MCP client through the Apify MCP server. See the Apify MCP documentation for the setup.
Your feedback
We're always working on improving the performance of our Actors. So if you've got any technical feedback for American Eagle Scraper or simply found a bug, please create an issue on the Actor's Issues tab.
More free tools, scrapers, MCP servers and data studies from the same team: mr-bridge.com.
Legal & responsible use
ae.com has its own terms of use, and it may restrict automated access or commercial reuse. Before you rely on the output, in particular for commercial use, confirm that your use is permitted by those terms. You remain responsible for how you use the results and for complying with the source's terms and with the laws that apply to you.