Swappa Scraper - Used Tech, Prices, Sellers & Price History
Pricing
from $1.40 / 1,000 results
Swappa Scraper - Used Tech, Prices, Sellers & Price History
Scrape Swappa used-tech listings by device, carrier, storage, condition or color. Extract prices, seller details, battery health and full listing data, plus price guides, trade-in values and monthly price history.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Swappa Scraper: Devices, Photos and Sold Price History
Collect Swappa listings for used electronics with asking prices, condition, battery health, seller information and full photo galleries. Get completed sales, monthly sold-price trends and trade-in values for each model. Search by device name or paste listing, product, price, guide or category links, then export the results as JSON, CSV or Excel or read them through the Apify API.
Why This Scraper?
- Asking prices and completed sales. Compare active listings with the amounts buyers actually paid, including condition, carrier and storage for each published sale.
- Full device photos. Enable
fetchDetailsfor all available full-size listing photos, descriptions, damage notes, seller policies and hardware specifications. - Seller context. Collect seller names, profile links, ratings, rating counts, locations, payment options and seller badges.
- Several ways in. Search by model name or paste catalog, product, prices, guide, sales-history, individual listing, category or brand links.
- History depth. Get monthly price trends and trade-in values, with optional deeper completed-sale history.
- Repeatable monitoring. Incremental mode labels new, updated, reappeared and expired records; resume mode skips records already collected by an interrupted run.
- Scoped collection. Filter search results by condition, storage, carrier and other device options. URL mode preserves the filters and starting page in your pasted links.
Use Cases
- Used-device retailers: compare asking prices and completed sales before sourcing inventory.
- Resellers: assess device condition, photos, damage notes and seller policies together.
- Pricing analysts: track depreciation across models, storage sizes and condition grades.
- Marketplace researchers: monitor inventory, seller activity and changes on a schedule.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
kind | listing or soldPrices |
listingId | LAAA00000 |
productSlug / productName | apple-iphone-15-pro / Apple iPhone 15 Pro |
price / priceExact / currency | 500 / 499.75 / USD |
condition / damageDescription | Good / Minor scratches on the frame. |
batteryHealthPct | 92 |
storage / color / carrier | 256GB / Blue / Unlocked |
modelNumber / gtin13 | A0000 / 0000000000000 |
images / imageCount / imagesComplete | Full-size photo URLs / 7 / true |
sellerId / sellerName / sellerProfileUrl | ABC000 / Sample Seller / seller profile URL |
sellerRating / sellerRatingsCount | 5.0 / 100 |
sellerLocation / sellerBadges | Sample City / ["Trusted Seller"] |
description / sellerAddendum | Seller-provided description and additional terms |
shippingCost / shippingPolicy / shippingDetails | 0 / seller policy text / shipping information |
returnPolicy / returnDetails | Seller return terms and marketplace return information |
compatibleCarriers / conditionDetails | Compatible carriers and condition requirements |
listingBadges / stockPhotos | ["Approved", "Featured"] / false |
listedAt / listingUpdatedAt / listingExpiresAt | 2026-01-01 / 2026-01-03 / 2026-01-31 |
specifications | Grouped camera, processor, memory, battery, display, dimensions and weight specifications |
changeType / changedFields | UPDATED / ["price"] |
url / scrapedAt | Listing URL / 2026-01-01T00:00:00Z |
Sold-price records contain salesHistory, soldPriceMin, soldPriceAvg, soldPriceMax, priceTrend, storagePrices, carrierStoragePrices and the dates covered. Photos, policies and specifications depend on what the listing publishes. imagesComplete: false means the full gallery could not be collected; the returned photos are partial. Results, Devices for sale, Device details and Sold price history are available as separate output tabs.
How to Use
- Select Search for model names or URL for pasted Swappa links.
- Choose Listings, Sold prices, or Both, then enable device details or deeper sold history if needed.
- Set Max listings to control the number of returned records.
- Start the run and download the dataset or access it through the API.
Search by device name:
{"mode": "search","queries": ["iPhone 15 Pro"],"resultType": "listings","fetchDetails": true,"maxListings": 20}
Use product, price and category links:
{"mode": "url","urls": ["https://swappa.com/listings/apple-iphone-15-pro?condition=mint&page=2","https://swappa.com/prices/apple-iphone-15-pro","https://swappa.com/catalog/product/apple-iphone-15-pro","https://swappa.com/guide/apple-iphone-15-pro","https://swappa.com/buy/phones"],"resultType": "both","fetchDetails": true,"maxListings": 20}
Collect deeper sold-price history:
{"mode": "search","queries": ["iPhone 15 Pro", "Galaxy S24 Ultra"],"resultType": "soldPrices","deepSoldHistory": true,"maxListings": 2}
Monitor a model for changes:
{"mode": "search","queries": ["iPhone 15 Pro"],"resultType": "listings","condition": "mint","incrementalMode": true,"emitExpired": true,"stateKey": "iphone-15-pro-mint","maxListings": 100}
Run it from your code
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("abotapi/swappa-com").call(run_input={"mode": "url","urls": ["https://swappa.com/prices/apple-iphone-15-pro"],"resultType": "both","fetchDetails": True,"maxListings": 5,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('abotapi/swappa-com').call({mode: 'url',urls: ['https://swappa.com/prices/apple-iphone-15-pro'],resultType: 'both',fetchDetails: true,maxListings: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use the Integrations tab to connect Make, Zapier, n8n, Google Sheets or webhooks.
URL behavior and limits
Model listing, product, prices, guide and sales-history links select the same device model. A single-device link selects that listing and, when requested, its model's sold-price history. Category, brand and price-index links collect the device models shown on that page. URL filters and page=N are preserved for device listings; search-only filters do not replace them. Price and battery bounds apply to listings in either mode.
maxListings counts both device and sold-price records. With both, allow enough room for both kinds. maxPages limits pages per model; omitted or 0 means no page limit. An expired or unavailable listing cannot supply an active device record. Unsupported links fail with a clear message.
History, resume and recurring runs
Monthly trends typically cover a rolling six-month window. Recent completed sales are limited per model and filter combination, so their date range varies. deepSoldHistory collects additional condition, carrier and storage combinations and merges duplicate sales. Missing monthly prices remain null.
Use resumeFromRunId to finish an interrupted run without repeating its collected listing IDs. Use incrementalMode with the same stateKey for recurring monitoring. emitUnchanged includes unchanged rows; emitExpired applies only when the run proves that the monitored catalog was fully scanned. Capped or incomplete runs do not prove that unseen listings expired.
Send results into your apps (MCP connectors)
Results can optionally be piped into apps you already use, through Model Context Protocol connectors. Authorize a connector under Apify, Settings, API and Integrations, then select it in the mcpConnectors input. For Notion, also set notionParentPageUrl to the page under which item pages should be created. Use maxNotifyListings to cap how many items are written to each connector per run.
What gets written is a condensed, human-readable summary per item: a title plus the key fields flattened to plain text. Nested objects collapse to their main value and arrays are trimmed to a few entries, so the connector view is a digest, not a mirror. The complete record, including the full images, salesHistory and priceTrend arrays, always stays in the Apify dataset. Leaving mcpConnectors empty skips the export entirely and never changes the dataset output.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | Search device names or read pasted links in url mode. |
queries | array | empty | Search mode: device names or product slugs. |
resultType | string | both | listings, soldPrices, or both. |
condition | string | any | Search mode: new, mint, good, or fair. |
carrier | string | any | Search mode: carrier compatibility, including unlocked, att, t-mobile, verizon, and mint. |
storage | string | any | Search mode: storage token, such as 128gb or 1tb. |
color | string | any | Search mode: color token. |
modeln | string | any | Search mode: model-number token. |
sort | string | site default | Search mode: price_low, price_high, listing_created_newest, or listing_created_oldest. |
withWarranty | boolean | false | Search mode: one-year warranty listings only. |
acceptsCreditCards | boolean | false | Search mode: sellers accepting card payments. |
carrierUnlockedOnly | boolean | false | Search mode: unlocked devices only. |
excludeBusinesses | boolean | false | Search mode: individual sellers only. |
phoneCheckCertified | boolean | false | Search mode: certified devices only. |
internationalShipping | boolean | false | Search mode: international shipping listings only. |
urls | array | empty | URL mode: listing, product, prices, guide, sales-history, category or brand links. |
minPrice | integer | unset | Both modes: minimum device price in USD. |
maxPrice | integer | unset | Both modes: maximum device price in USD. |
minBatteryHealth | integer | unset | Both modes: minimum battery percentage; devices without a percentage are excluded. |
fetchDetails | boolean | false | Collect full galleries and device details. Adds a per-record surcharge for enriched results. |
deepSoldHistory | boolean | false | Collect deeper completed-sale history. Adds a per-record surcharge for deepened results. |
maxListings | integer | 20 | Maximum returned records across both kinds. 0 means unlimited. |
maxPages | integer | unlimited | Maximum catalog pages per model. Omitted or 0 means unlimited. |
incrementalMode | boolean | false | Label and suppress records using the previous matching baseline. |
emitUnchanged | boolean | false | Also emit unchanged records. |
emitExpired | boolean | false | Emit missing listings after a complete catalog scan. |
stateKey | string | derived | Name the recurring monitoring baseline. |
resumeFromRunId | string | unset | Skip listing IDs already collected by this run or dataset. |
proxy | object | Residential, US | Connection settings; use the recommended input preset. |
mcpConnectors | array | empty | Optional connectors for sending results into your apps. |
notionParentPageUrl | string | unset | Parent Notion page for connector output. |
maxNotifyListings | integer | 50 | Maximum records sent to each connector. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"kind": "listing","listingId": "LAAA00000","productSlug": "apple-iphone-15-pro","productName": "Apple iPhone 15 Pro","brand": "Apple","title": "Sample listing headline","price": 500,"priceExact": 499.75,"currency": "USD","condition": "Good","batteryHealthPct": 92,"storage": "256GB","color": "Blue","carrier": "Unlocked","carrierUnlocked": true,"modelNumber": "A0000","gtin13": "0000000000000","featured": true,"listingBadges": ["Approved", "Featured"],"stockPhotos": false,"imageUrl": "https://static.swappa.com/media/listing/LAAA00000/sample-front.jpg","images": ["https://static.swappa.com/media/listing/LAAA00000/sample-front.jpg","https://static.swappa.com/media/listing/LAAA00000/sample-back.jpg"],"imageCount": 2,"imagesComplete": true,"sellerId": "ABC000","sellerName": "Sample Seller","sellerProfileUrl": "https://swappa.com/profile/ABC000","sellerRating": 5.0,"sellerRatingsCount": 100,"sellerLocation": "Sample City","sellerBadges": ["Trusted Seller"],"acceptsPaypal": true,"acceptsCreditCards": true,"description": "Sample device description.","damageDescription": "Minor scratches on the frame.","sellerAddendum": "Sample seller terms.","compatibleCarriers": ["AT&T", "T-Mobile", "Verizon"],"compatibleCarrierCount": 3,"shippingCost": 0,"shippingPolicy": "Sample shipping policy.","shippingDetails": ["Ships with tracking and insurance."],"returnPolicy": "Sample return policy.","returnDetails": ["Marketplace return policies apply."],"conditionDetails": ["Minor wear and tear."],"listedAt": "2026-01-01","listingUpdatedAt": "2026-01-03","listingExpiresAt": "2026-01-31","specifications": [{"group": "Battery and Charging", "name": "Capacity", "value": "3274 mAh"}],"detailFetched": true,"changeType": "NEW","changedFields": [],"firstSeenAt": "2026-01-01T00:00:00Z","lastSeenAt": "2026-01-01T00:00:00Z","url": "https://swappa.com/listing/view/LAAA00000","scrapedAt": "2026-01-01T00:00:00Z"}
Plan Requirement
Use an Apify account with access to the connection settings selected in the input. Check the Pricing tab for current result and enrichment charges.
FAQ
How much does it cost?
See the Pricing tab for current rates. maxListings controls the returned record count. Device details and deeper sold history add a surcharge to successfully enriched records.
Is it legal to scrape Swappa?
Use publicly available data and follow the site's terms, applicable privacy laws and other regulations. You are responsible for having a lawful basis for any personal data you process.
Can I collect only new or changed devices on a schedule?
Yes. Enable incrementalMode and reuse the same input scope and stateKey. Leave emitUnchanged off to suppress unchanged records. Use resumeFromRunId separately to finish an interrupted collection.
Why do I see only one photo?
Catalog-only collection returns a preview image. Enable fetchDetails for the full images array. Check imagesComplete to distinguish a complete gallery from a partial read. Some listings publish only one photo or use seller stock photos.
Can I paste a prices link and still get device listings?
Yes. Product, prices, guide and sales-history links select the model; resultType selects its listings, sold history or both. Category and brand links select the models shown on that page.
Why did my run fail instead of returning an empty dataset?
An unreadable page or unsupported link is reported as a failure. Review the input and try again shortly. An empty market or a filter with no matching devices is different from a page that could not be read.
Can I use the results with AI agents or MCP?
Yes. Read the dataset through the Apify API or configure the optional MCP connectors to send a summary into your apps. The complete records remain in the dataset.
π Want more electronics data?
Pair this actor with these related scrapers from the same team:
| π·οΈ Avito.ru Scraper From $1/1K. Scrape structured listings from Avito.ru by region, category, filters, or... | π Bic Camera Scraper Scrape Bic Camera (biccamera.com) products: JPY price, list price and discount, Bic Point... |
| π Boulanger.com Scrape Boulanger (boulanger.com) electronics and home-appliance products: current price... | π Darty Scraper Scrape Darty (darty.com) products: current price plus strike-through reference price and... |
| π Dienmayxanh Scraper Scrape dienmayxanh.com home appliances and electronics with full specifications, current... | π₯¦ El Corte InglΓ©s Scraper Scrape El Corte InglΓ©s elcorteingles.es products across fashion, electronics, home... |
π Browse all abotapi scrapers
π¬ Support & custom scrapers
- π Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- π οΈ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- β Enjoying it? A quick review on the actor page helps other users find it.