Swappa Scraper icon

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.

Open actor on Apify ↗Need a custom scraper?Telegram @abotapi ↗

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.

Supported input fields
InputWhat it controls
modestring · requiredSearch mode resolves a device keyword to a product and walks its catalogue. URL mode reads addresses you paste.

Choices: search, url

resultTypestringApplies 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.

Choices: both, listings, soldPrices

queriesarrayDevice 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.
conditionstringSearch mode only. Keep only devices graded at this condition.

Choices: , new, mint, good, fair

carrierstringSearch 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.

Choices: , unlocked, att, t-mobile, verizon, mint

storagestringSearch mode only. Keep only devices with this storage size. Sizes that a given model does not offer simply return nothing.

Choices: , 64gb, 128gb, 256gb, 512gb, 1tb

colorstringSearch 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
More input fields
InputWhat it controls
modelnstringSearch 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.
sortstringSearch mode only. Order the catalogue before reading it.

Choices: , price_low, price_high, listing_created_newest, listing_created_oldest

withWarrantybooleanSearch mode only. Keep only devices sold with a one-year warranty.
acceptsCreditCardsbooleanSearch mode only. Keep only devices from sellers who take card payment.
carrierUnlockedOnlybooleanSearch mode only. Keep only devices that are carrier unlocked.
excludeBusinessesbooleanSearch mode only. Drop high-volume enterprise sellers and keep individual sellers only.
phoneCheckCertifiedbooleanSearch mode only. Keep only devices that carry a third-party diagnostic certification.
internationalShippingbooleanSearch mode only. Keep only devices whose seller ships outside the United States.
urlsarrayMulti-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.
minPriceintegerApplies in both modes. Drop devices priced below this.
maxPriceintegerApplies in both modes. Drop devices priced above this.
minBatteryHealthintegerApplies in both modes. Drop devices whose stated battery health is below this. Devices that publish no battery figure are dropped when this is set.
fetchDetailsbooleanOpen 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.
deepSoldHistorybooleanThe 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.
maxPagesintegerSafety 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.
maxListingsintegerStop after this many records. Use 0 for no limit.
incrementalModebooleanRemember 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.
emitUnchangedbooleanIncremental mode only. Returns records that did not change since the last run. These are extra rows and they are billed like any other row.
emitExpiredbooleanIncremental 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.
stateKeystringIncremental 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.
resumeFromRunIdstringContinue one interrupted run: records that run already returned are skipped. For a repeating schedule use incrementalMode instead.
mcpConnectorsarrayOptionally 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).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap 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.

kindType
listingIdDevice ID
productSlugModel
productNameModel name
priceAsking price
conditionCondition
storageStorage
carrierCarrier
batteryHealthPctBattery %
sellerNameSeller
sellerRatingSeller rating
sellerLocationShips from
Show 89 more fields
startingPriceModel low price
averagePriceModel avg price
soldPriceAvgAvg sold price
salesHistoryCountSold rows
salesHistoryFromSold history from
salesHistoryToSold history to
priceTrendMonthsTrend months
changeTypeChange
urlAddress
scrapedAtScraped at
soldPriceMinLowest sold
soldPriceMaxHighest sold
salesHistoryCompleted sales
priceTrendMonthly sold-price trend
priceTrendFromTrend from
priceTrendToTrend to
storagePricesList vs sale by storage
carrierStoragePricesCarrier and storage prices
deepHistoryDeep sweep
historyFiltersSweptSlices swept
pricesUpdatedOnPrices updated
brandBrand
titleListing title
priceExactExact price
currencyCurrency
colorColour
carrierUnlockedUnlocked
modelNumberModel number
gtinBarcode
featuredFeatured
imageUrlImage
imageCountImages
sellerRatingsCountSeller ratings
sellerBadgesSeller badges
acceptsPaypalPayPal
acceptsCreditCardsCards
descriptionDescription
sellerAddendumSeller addendum
compatibleCarriersCompatible carriers
shippingCostShipping
detailFetchedDetail read
imagesFull-size photos
imagesCompleteGallery complete
sellerIdSeller ID
sellerProfileUrlSeller profile
sellerPictureUrlSeller picture
listingBadgesListing badges
damageDescriptionDamage description
shippingPolicySeller shipping policy
returnPolicySeller return policy
shippingDetailsShipping details
returnDetailsReturn details
conditionDetailsCondition requirements
stockPhotosStock photos
specificationsHardware specifications
listedAtDate listed
listingUpdatedAtDate updated
listingExpiresAtExpiry date
sellerProfileSlugsellerProfileSlug
compatibleCarrierCountcompatibleCarrierCount
gtin13gtin13
availabilityavailability
itemConditionUriitemConditionUri
productRatingproductRating
productReviewCountproductReviewCount
priceValidUntilpriceValidUntil
codeListing code (text)
deviceSlugDevice slug
deviceNameDevice
slugDevice slug (device record)
nameName (device record)
minPriceStarting price (USD) (number)
updatedAtGuide updated
lowPriceLow price (USD) (number)
highPriceHigh price (USD) (number)
changedFieldsChanged fields (incremental)
batteryHealthPercentBattery health (%) (number)
sellerUsernameSeller username
sellerTrustedTrusted seller
sellerPowerSellerPower seller
listingCreatedAtCreated
returnsTextReturns notes
detailEnrichedDetail fetched
platformPlatform
searchTermSearch term
tiersCarrier x storage tiers
priceHistoryMonthly price history
firstSeenAtFirst seen
lastSeenAtLast seen

Example 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.