Swappa Scraper at a glance
Swappa Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its output documents 101 fields, including type, device id, model, model name and asking price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.40 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.40 on paid plans
- Output
- 101 documented fields · JSON, CSV, Excel
- Inputs
- 31 options
What Swappa Scraper can do
- 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 fetchDetails for 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.
Choose what to collect
These inputs let you configure Swappa Scraper - Used Tech, Prices, Sellers & Price History. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search mode resolves a device keyword to a product and walks its catalogue. URL mode reads addresses you paste. |
resultTypestring | Applies in both modes. Sold-price history is one record per device model carrying completed-sale rows, the monthly average sold price per storage size, list-versus-sale spreads, and the trade-in value per carrier and storage. Listings are the individual devices currently for sale. |
queriesarray | Device names to look up, for example 'iPhone 15 Pro' or 'MacBook Air M2'. A product slug such as 'apple-iphone-15-pro' is accepted directly. Each entry becomes one scrape target. |
conditionstring | Search mode only. Keep only devices graded at this condition. |
carrierstring | Search mode only. Keep only devices that work on this carrier. This includes carrier-locked devices on that network AND unlocked devices, which work anywhere; devices locked to a different carrier are excluded. An unrecognised value is ignored by the source and returns everything. |
storagestring | Search mode only. Keep only devices with this storage size. Sizes that a given model does not offer simply return nothing. |
colorstring | Search mode only. Colour slug as the catalogue uses it, for example 'black' or 'blue'. Leave empty for any colour. A value the source does not recognise is ignored and returns every colour, so check the spelling if the results look unfiltered. |
Show 24 more inputs
| Input | What it controls |
|---|---|
modelnstring | Search mode only. The catalogue's model-number filter token. Leave empty for any model number. A value the source does not recognise is ignored and returns every model number, so check the token if the results look unfiltered. |
sortstring | Search mode only. Order the catalogue before reading it. |
withWarrantyboolean | Search mode only. Keep only devices sold with a one-year warranty. |
acceptsCreditCardsboolean | Search mode only. Keep only devices from sellers who take card payment. |
carrierUnlockedOnlyboolean | Search mode only. Keep only devices that are carrier unlocked. |
excludeBusinessesboolean | Search mode only. Drop high-volume enterprise sellers and keep individual sellers only. |
phoneCheckCertifiedboolean | Search mode only. Keep only devices that carry a third-party diagnostic certification. |
internationalShippingboolean | Search mode only. Keep only devices whose seller ships outside the United States. |
urlsarray | Multi-URL supported. Paste listing catalog, product, prices, guide, sales-history, single device, or category/brand links. Page numbers and URL filters are preserved. The catalogue filters above are ignored; the price and battery filters below still apply. |
minPriceinteger | Applies in both modes. Drop devices priced below this. |
maxPriceinteger | Applies in both modes. Drop devices priced above this. |
minBatteryHealthinteger | Applies in both modes. Drop devices whose stated battery health is below this. Devices that publish no battery figure are dropped when this is set. |
fetchDetailsboolean | Open every device page for the full description, damage notes, seller policies, compatible carriers, specifications and all full-size photos. Adds a per-record surcharge for successfully enriched results. |
deepSoldHistoryboolean | The site publishes the twenty most recent completed sales per slice, so a fast-selling model shows only a couple of days. Turning this on sweeps the condition, carrier and storage slices to reach months of completed sales instead. Costs up to twelve extra requests per device model and adds the detail-enrichment surcharge to each sold-price record it deepens. |
maxPagesinteger | Safety stop on how deep to walk each device's catalogue. Use 0 for no limit, which is the default: the walk stops on its own when the catalogue ends, and the maximum-devices setting below is the one limit that bounds a normal run. |
maxListingsinteger | Stop after this many records. Use 0 for no limit. |
incrementalModeboolean | Remember the previous run of this same search and label each record NEW, UPDATED, REAPPEARED or EXPIRED. For finishing a single interrupted run use resumeFromRunId instead. |
emitUnchangedboolean | Incremental mode only. Returns records that did not change since the last run. These are extra rows and they are billed like any other row. |
emitExpiredboolean | Incremental mode only. Returns a row for every previously seen device that is gone now. These are extra rows and they are billed like any other row. Only produced when the run proved it read the whole catalogue. A run given individual listing addresses reads a fixed list rather than a catalogue, so it never produces these rows. |
stateKeystring | Incremental mode only. Name this monitoring baseline yourself. Leave empty and one is derived from the mode, devices, addresses and every filter, so two different setups never share a baseline. |
resumeFromRunIdstring | Continue one interrupted run: records that run already returned are skipped. For a repeating schedule use incrementalMode instead. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API and Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; it never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
kindTypelistingIdDevice IDproductSlugModelproductNameModel namepriceAsking priceconditionConditionstorageStoragecarrierCarrierbatteryHealthPctBattery %sellerNameSellersellerRatingSeller ratingsellerLocationShips fromShow 89 more fields
startingPriceModel low priceaveragePriceModel avg pricesoldPriceAvgAvg sold pricesalesHistoryCountSold rowssalesHistoryFromSold history fromsalesHistoryToSold history topriceTrendMonthsTrend monthschangeTypeChangeurlAddressscrapedAtScraped atsoldPriceMinLowest soldsoldPriceMaxHighest soldsalesHistoryCompleted salespriceTrendMonthly sold-price trendpriceTrendFromTrend frompriceTrendToTrend tostoragePricesList vs sale by storagecarrierStoragePricesCarrier and storage pricesdeepHistoryDeep sweephistoryFiltersSweptSlices sweptpricesUpdatedOnPrices updatedbrandBrandtitleListing titlepriceExactExact pricecurrencyCurrencycolorColourcarrierUnlockedUnlockedmodelNumberModel numbergtinBarcodefeaturedFeaturedimageUrlImageimageCountImagessellerRatingsCountSeller ratingssellerBadgesSeller badgesacceptsPaypalPayPalacceptsCreditCardsCardsdescriptionDescriptionsellerAddendumSeller addendumcompatibleCarriersCompatible carriersshippingCostShippingdetailFetchedDetail readimagesFull-size photosimagesCompleteGallery completesellerIdSeller IDsellerProfileUrlSeller profilesellerPictureUrlSeller picturelistingBadgesListing badgesdamageDescriptionDamage descriptionshippingPolicySeller shipping policyreturnPolicySeller return policyshippingDetailsShipping detailsreturnDetailsReturn detailsconditionDetailsCondition requirementsstockPhotosStock photosspecificationsHardware specificationslistedAtDate listedlistingUpdatedAtDate updatedlistingExpiresAtExpiry datesellerProfileSlugsellerProfileSlugcompatibleCarrierCountcompatibleCarrierCountgtin13gtin13availabilityavailabilityitemConditionUriitemConditionUriproductRatingproductRatingproductReviewCountproductReviewCountpriceValidUntilpriceValidUntilcodeListing code (text)deviceSlugDevice slugdeviceNameDeviceslugDevice slug (device record)nameName (device record)minPriceStarting price (USD) (number)updatedAtGuide updatedlowPriceLow price (USD) (number)highPriceHigh price (USD) (number)changedFieldsChanged fields (incremental)batteryHealthPercentBattery health (%) (number)sellerUsernameSeller usernamesellerTrustedTrusted sellersellerPowerSellerPower sellerlistingCreatedAtCreatedreturnsTextReturns notesdetailEnrichedDetail fetchedplatformPlatformsearchTermSearch termtiersCarrier x storage tierspriceHistoryMonthly price historyfirstSeenAtFirst seenlastSeenAtLast seenExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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,
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Swappa Scraper return?
Swappa Scraper returns 101 documented fields, including type, device id, model, model name, asking price, condition, storage and carrier. Availability of each field depends on the source page and the selected mode.
How much does Swappa Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.40 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
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.
