Printables 3D Model Scraper avatar

Printables 3D Model Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Printables 3D Model Scraper

Printables 3D Model Scraper

Scrape Printables.com - Prusa's 3D-print model community. Search models, browse categories, fetch trending/popular feeds, list a designer's uploads, or pull full model detail (print settings, files, images, licence). HTTP-only via the public GraphQL API. No auth, no proxy.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Scrape Printables.com — Prusa's community platform for free and paid 3D-printable models. Search by keyword, browse any of the 89 official categories, pull the trending/popular feed, list everything a designer has published, list every model in a public collection, or fetch full detail for one model (print settings, files, images, license, remix lineage, related models, and community "make" photos). HTTP-only via Printables' own public API. No auth, no cookies, no proxy.

What this actor does

  • Six modes: search, category, trending, byUser, byCollection, modelDetail
  • Rich filters: category, material, printer, "designed with" modeling app, print technology (FDM/resin via sliced-file type), license, price, AI-generated status, min/max print duration, min/max weight, published-within-N-days freshness, "has makes only"
  • 10 sort orders: relevance, latest, popular, top rated, most downloaded, most liked, most printed, most viewed, trending, random
  • Full model detail on demand: description, print settings, every file name/size/format, all gallery images, remix parent(s), related models, and a sample of community "make" photos
  • Designer profiles: follower counts, published-model counts, verification badge
  • Empty fields are omitted

Output per model

  • modelId, name, slug, modelUrl, sourceUrl
  • summary — short blurb (all modes); description — full write-up, HTML stripped to plain text (mode=modelDetail only)
  • categoryId, categoryName, categoryPath[]
  • licenseId, licenseName, licenseAbbreviation
  • tags[], materials[] — recommended filaments/resins
  • printerName, printerCategory (FFF or SLA)
  • printDurationHours, weightGrams, layerHeightsMm[], nozzleDiametersMm[], numPieces
  • filesType (GCODE / SLA / NONE), filesCount, imagesCount
  • likesCount, ratingAvg, ratingCount, downloadCount, viewsCount, makesCount, remixCount, commentCount
  • isPremium, priceUsd (paid models only), isAiGenerated, isNsfw, isPoliticalContent
  • datePublished, firstPublished, lastModified, thingiverseLink (if migrated from Thingiverse)
  • coverImageUrl, coverImageWidth, coverImageHeight
  • imageUrls[] — full gallery (mode=modelDetail only)
  • files[]{name, fileSizeBytes, fileFormat, printDurationHours, material, printer} per file; fileFormats[] — distinct formats included (mode=modelDetail only)
  • remixOf[]{modelId, name, url} per parent model this is a remix of (mode=modelDetail only)
  • relatedModels[]{modelId, name, url, categoryName, imageUrl}, up to 8 similar models (mode=modelDetail only)
  • makes[]{makerHandle, makerUsername, imageUrl, comment, madeAt}, up to 8 sampled community "make" photos (mode=modelDetail only)
  • designerUserId, designerHandle, designerUsername, designerVerified, designerAvatarUrl, designerProfileUrl, designerFollowersCount, designerPublishedModelsCount
  • recordType: "model", scrapedAt

Note on file downloads: actual STL/G-code/3MF file download links on Printables are generated on demand behind the site's own download flow and are not exposed by the public API — including them here would mean shipping broken or expiring URLs. Instead, every file's name, size, and format is included so you always know exactly what's in the model before deciding to visit the page.

Input

FieldTypeDefaultDescription
modestringsearchsearch / category / trending / byUser / byCollection / modelDetail
searchQuerystring3d benchyFree-text query (mode=search)
categoryIdselectCategory to browse (mode=category required; optional filter for mode=search only)
designerHandleOrIdstringPrusa3DHandle, profile URL, or numeric ID (mode=byUser)
modelUrlOrIdstringModel URL or numeric ID (mode=modelDetail)
collectionUrlOrIdstring2687005Collection URL or numeric ID (mode=byCollection)
sortByselectpopularResult order — see the 10 options above
materialselectFilament/resin material filter
printerIdselectFilter by a specific printer (curated list of ~48 common current-gen printers across Prusa, Bambu Lab, Creality, Anycubic, Elegoo, Voron, and more)
modelingAppselectFilter by the modeling application source files were authored in (Fusion, Blender, SolidWorks, etc.)
fileTypeselectPrint technology: GCODE (FDM/FFF) / SLA (resin) / NONE (source files only)
licenseTypeselectLicense filter
paidStatusselectallall / free / paid / club / priced
aiGeneratedFilterselectincludeinclude / exclude / only
minPrintDurationHoursintDrop models with a shorter estimated print time
maxPrintDurationHoursintDrop models with a longer estimated print time
minWeightGramsintDrop models with less estimated filament weight
maxWeightGramsintDrop models with more estimated filament weight
publishedWithinDaysintOnly models first published within this many days
hasMakesOnlyboolfalseOnly models at least one user has printed and shared a photo of
maxItemsint50Hard cap (1–1000)

Example: search with filters

{
"mode": "search",
"searchQuery": "articulated dragon",
"fileType": "GCODE",
"material": "1",
"sortBy": "topRated",
"maxItems": 50
}

Example: browse a category

{
"mode": "category",
"categoryId": "101",
"sortBy": "trending",
"paidStatus": "free",
"maxItems": 100
}

Example: a designer's uploads

{
"mode": "byUser",
"designerHandleOrId": "Prusa3D",
"sortBy": "mostDownloaded",
"maxItems": 200
}

Example: single model detail

{
"mode": "modelDetail",
"modelUrlOrId": "https://www.printables.com/model/3161-3d-benchy"
}

Example: models in a public collection

{
"mode": "byCollection",
"collectionUrlOrId": "2687005",
"sortBy": "mostLiked",
"maxItems": 100
}
{
"mode": "search",
"searchQuery": "vase",
"printerId": "20",
"modelingApp": "7",
"minWeightGrams": 100,
"publishedWithinDays": 90
}

Use cases

  • Maker marketplaces — mirror or cross-list Printables catalog data
  • 3D-printing content sites — build "trending models this week" roundups
  • Print farm sourcing — filter by print duration and weight to estimate job cost before committing
  • Designer analytics — track a competitor's or your own upload history, likes, and download trends
  • Material/technology research — see what's being printed in resin vs. FDM by category
  • Dataset building — bulk-export licensing and file-format metadata for ML or cataloging projects

FAQ

What's Printables.com? Prusa Research's community platform for sharing free and paid 3D-printable models — search, categories, likes, ratings, "makes" (photos of completed prints), and designer profiles. See printables.com.

Is this affiliated with Prusa or Printables? No — this is an independent third-party actor built against Printables' publicly accessible API.

Are there rate limits? Yes, Printables applies request-rate limiting at the CDN level. search, category, byCollection, and modelDetail use a consistently reliable API endpoint and paginate up to the 1000-item maximum without issues. trending and byUser, however, use a different upstream endpoint (morePrints) that has been observed to intermittently rate-limit or fully reject requests from cloud/datacenter IP ranges — including Apify's — regardless of the actor's automatic retries with exponential backoff, sometimes returning 0 results even though the same query works fine from a residential IP. This is an upstream anti-bot limitation on Printables' side, not a bug in the actor, and it cannot be reliably worked around without a paid residential proxy. If guaranteed results matter, use search or category mode instead — e.g. category with sortBy: "trending" gives a trending-style view of one category, and plain search with sortBy: "popular" mirrors the sitewide trending feed.

Why is description only on modelDetail? The full write-up can be long HTML; fetching it for every row in a 500-item search would be wasteful. Use modelDetail on any modelId/modelUrl returned by another mode to get the full text.

Why no file download URLs? Printables generates download links on demand and they aren't part of the public API. File name, fileSizeBytes, and fileFormat are included instead so you know exactly what a model ships before visiting the page.

What does printerCategory mean? FFF is standard filament (FDM) printing; SLA is resin printing. Some models support both.

What's the difference between likesCount and makesCount? likesCount is how many users favorited the model; makesCount is how many users actually printed it and posted a photo ("a make").

Why do some sort options behave the same in search and category modes? Both use Printables' text-search endpoint under the hood (category browsing is a category-filtered search with no keyword), which supports 5 native orderings (relevance, latest, popular, rating, most-printed); a few of the actor's 10 friendly sort labels map to their closest native equivalent there. All 10 are fully distinct in trending and byUser modes.

Can I combine trending mode with a specific category? Not currently — Printables' category-scoped browsing endpoint is rate-limited far more aggressively than its search endpoint, so category mode is built on search (reliable, with sortBy=trending giving a close popularity-based equivalent) while trending mode is built on the dedicated trending feed (no category filter). Use category mode with sortBy: "trending" to get a trending-style view of one category.

Why only ~48 printers in the printerId dropdown when Printables tracks 600+? That's the full stable, <500-cap threshold from our dropdown-completeness rule — 600+ is too many for a usable enum, so the list is curated to the most commonly searched-for current-generation printers across every major brand (Prusa, Bambu Lab, Creality, Anycubic, Elegoo, Voron, Formlabs, and more). The filter is verified against the live API and enforced both server-side (search/category modes) and client-side (every mode, since Printables' feed API silently ignores a printer filter on trending/byUser/byCollection).

What did the "feature surface expansion" pass add? printerId and modelingApp filters, minPrintDurationHours/minWeightGrams (symmetric to the existing max fields), publishedWithinDays freshness filter, a new byCollection mode, and modelDetail enrichment with remixOf, relatedModels, and makes (sampled community "make" photos). It also fixed a live upstream regression: Printables deprecated its offset-paginated prints query sometime after this actor's initial release, which silently broke trending and byUser modes (they returned 0 results). Both modes now use the still-functional cursor-paginated morePrints query.

Did you consider a byTag mode? Yes, but Printables' tag-scoped browsing argument (tags) is silently ignored by its feed API in the same way materialIds/printerIds are — verified empirically, a bogus or real tag ID returns identical unfiltered results. Implementing a reliable tag browse would require paginating the entire catalog and filtering client-side, which isn't viable within a reasonable request budget. searchQuery already matches against tags reasonably well as a substitute.

How fresh is the data? Real-time — every request reads live from Printables' own API, the same one their website uses.