Printables 3D Model Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
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,sourceUrlsummary— short blurb (all modes);description— full write-up, HTML stripped to plain text (mode=modelDetail only)categoryId,categoryName,categoryPath[]licenseId,licenseName,licenseAbbreviationtags[],materials[]— recommended filaments/resinsprinterName,printerCategory(FFForSLA)printDurationHours,weightGrams,layerHeightsMm[],nozzleDiametersMm[],numPiecesfilesType(GCODE/SLA/NONE),filesCount,imagesCountlikesCount,ratingAvg,ratingCount,downloadCount,viewsCount,makesCount,remixCount,commentCountisPremium,priceUsd(paid models only),isAiGenerated,isNsfw,isPoliticalContentdatePublished,firstPublished,lastModified,thingiverseLink(if migrated from Thingiverse)coverImageUrl,coverImageWidth,coverImageHeightimageUrls[]— 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,designerPublishedModelsCountrecordType: "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
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / category / trending / byUser / byCollection / modelDetail |
searchQuery | string | 3d benchy | Free-text query (mode=search) |
categoryId | select | – | Category to browse (mode=category required; optional filter for mode=search only) |
designerHandleOrId | string | Prusa3D | Handle, profile URL, or numeric ID (mode=byUser) |
modelUrlOrId | string | – | Model URL or numeric ID (mode=modelDetail) |
collectionUrlOrId | string | 2687005 | Collection URL or numeric ID (mode=byCollection) |
sortBy | select | popular | Result order — see the 10 options above |
material | select | – | Filament/resin material filter |
printerId | select | – | Filter by a specific printer (curated list of ~48 common current-gen printers across Prusa, Bambu Lab, Creality, Anycubic, Elegoo, Voron, and more) |
modelingApp | select | – | Filter by the modeling application source files were authored in (Fusion, Blender, SolidWorks, etc.) |
fileType | select | – | Print technology: GCODE (FDM/FFF) / SLA (resin) / NONE (source files only) |
licenseType | select | – | License filter |
paidStatus | select | all | all / free / paid / club / priced |
aiGeneratedFilter | select | include | include / exclude / only |
minPrintDurationHours | int | – | Drop models with a shorter estimated print time |
maxPrintDurationHours | int | – | Drop models with a longer estimated print time |
minWeightGrams | int | – | Drop models with less estimated filament weight |
maxWeightGrams | int | – | Drop models with more estimated filament weight |
publishedWithinDays | int | – | Only models first published within this many days |
hasMakesOnly | bool | false | Only models at least one user has printed and shared a photo of |
maxItems | int | 50 | Hard 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}
Example: printer + modeling-app filtered search
{"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.