September 23, 2026 · 12 min read
Thingiverse 3D Model Scraper: $5.00 per 1,000 results (2026)
Thingiverse 3D Model Scraper recorded 30 successful runs out of 30 total executions over the last 30 days without a single failure or timeout. Operating via five distinct modes, this HTTP-only Actor extracts structured design metadata, maker profiles, categories, and licensing details directly from publicly published web pages. It does not require login credentials or cookies to function. This tool is built for marketplace engineers, dataset researchers, and design tool developers who need clean catalog metadata; it is not for users seeking interactive app data.
What does a Thingiverse 3D Model Scraper run cost?
Each result costs $0.005 on the free tier, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.01 per GB of Actor memory.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Pricing sits at $0.005 per result, which equals $5.00 per 1,000 results on the free tier. The maxItems parameter has the largest direct impact on your total bill because it caps the number of records retrieved per run. To test your setup cleanly without unnecessary spend, run a single lookup with maxItems set to 1 before launching larger operations.
How do you run Thingiverse 3D Model Scraper from the API?
The schema marks 1 of its 8 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Thingiverse 3D Model Scraper, so the request works once your token is in place.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~thingiverse-3d-model-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"byIds","thingIds":["763622"],"thingUrls":[],"usernames":[],"searchQuery":"mount","license":"any","maxItems":5}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "byIds",
"thingIds": [
"763622"
],
"thingUrls": [],
"usernames": [],
"searchQuery": "mount",
"license": "any",
"maxItems": 5
}
run = client.actor("crawlerbros~thingiverse-3d-model-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "byIds",
"thingIds": [
"763622"
],
"thingUrls": [],
"usernames": [],
"searchQuery": "mount",
"license": "any",
"maxItems": 5
}
const run = await client.actor('crawlerbros~thingiverse-3d-model-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.
Which Thingiverse 3D Model Scraper inputs matter, and which can you skip?
The schema offers 8 controls with mode being the only required setting. The mode selector controls whether you retrieve items by IDs, URLs, latest publications, user profiles, or keyword searches. Most users should leave license set to any and avoid setting minLikes on their initial setup run.
mode(string): What to fetch from Thingiverse. Default:"byIds".thingIds(array): Numeric Thingiverse thing IDs, e.g.763622(the ID inthingiverse.com/thing:763622). Default:["763622"].thingUrls(array): Full Thingiverse share URLs, e.g.https://www.thingiverse.com/thing:763622. Default:[].usernames(array): Thingiverse usernames or profile URLs, e.g.CreativeToolsorhttps://www.thingiverse.com/CreativeTools. Default:[].searchQuery(string): Keyword matched (case-insensitive) against the title/description/category of the most recently published things on Thingiverse. Not a full-catalog index search - Thingiverse has no public full-text search API. Default:"mount".license(string): Only emit things published under this license.anydisables the filter. Default:"any".minLikes(integer): Drop things with fewer likes than this.maxItems(integer): Hard cap on emitted records. Thingiverse rate-limits individual thing/profile pages per IP, so each record may need a proxy retry - keep this modest (under ~100) for a fast run; larger values still work but take longer. Default:20.
Fixed-choice controls: mode accepts byIds, byUrls, latest, byUser, search; license accepts any, cc0, cc-by, cc-by-sa, cc-by-nd, cc-by-nc.
Move one control per run. Compare each new sample against the previous one and keep the accepted, uncertain, and excluded counts side by side. A control that increases volume without improving decision quality still bills at $0.005 per result.
What does Thingiverse 3D Model Scraper return?
Returned records include structured metadata like title, authorUsername, category, license, and imageUrl. They conspicuously omit secondary gallery images and tags, as those elements live inside Thingiverse's interactive app rather than its public page HTML. You can quickly verify compatibility by confirming your downstream process only requires the primary image and core catalog fields.
The Actor does not publish a per-field output list, so treat the first run as the specification: collect a small sample and record which fields are present before anything downstream depends on them.
How do you build the workflow end to end?
Open Thingiverse 3D Model Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select mode byIds and populate the thingIds array with a single known numeric ID such as 763622 to verify connectivity.
- Set maxItems to 1 and run the Actor once to confirm the returned record contains thingId, title, and imageUrl.
- Switch mode to search, enter your target string into searchQuery, and set license to cc0 or another desired license filter.
- Check that the returned dataset items contain valid license strings and non-null category fields before expanding the run.
- To target a specific designer, switch mode to byUser and supply their handle in the usernames array while leaving minLikes empty.
- Verify the returned profile object contains recordType set to maker along with populated displayName and profileUrl fields.
- Scale up maxItems to your desired batch size, ensuring you extend the execution timeout in Run Options if scraping larger batches.
How do you apply it? Three worked playbooks
These are Thingiverse 3D Model Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: 3D printing marketplaces
Outcome: enrich a product catalog with real Thingiverse metadata and licensing
Configure: mode="byIds", thingIds=["763622", "3717484"], maxItems=20
Working method: Start by supplying a batch of targeted numeric IDs in thingIds. Run the Actor and inspect the resulting dataset records to verify that each item includes the title, authorName, license, and imageUrl.
Deliverable: A JSON or CSV file containing model records with thingId, title, license, category, and authorUrl.
Stop condition: The returned dataset contains items where recordType is not equal to thing or thingUrl is missing.
Use case 2: Design discovery tools
Outcome: surface newly published models for a "what's new" feed
Configure: mode="latest", maxItems=50, minLikes=5
Working method: Execute a scheduled run using mode set to latest with maxItems set to 50. Compare the datePublished values across runs to isolate newly listed models.
Deliverable: A structured dataset of recent 3D print designs including publish dates, primary image URLs, and author details.
Stop condition: The scraped dataset returns zero records or consecutive items share identical thingId values during a polling run.
Use case 3: Maker analytics
Outcome: track a designer's published work, likes, and comment engagement over time
Configure: mode="byUser", usernames=["CreativeTools"], maxItems=100
Working method: Pass designer handles into the usernames array under mode set to byUser. Confirm that the run returns maker records containing bio, avatarUrl, and profile details.
Deliverable: A dataset of maker profiles detailing username, displayName, bio, and profileUrl.
Stop condition: The output dataset contains empty profile records or fails to return recordType equal to maker.
What breaks, and how do you design around it?
- Large
maxItemsruns take longer. Thingiverse rate-limits individual thing/profile page requests per source IP much more aggressively than its static sitemap files. KeepmaxItemsmodest (≤50) for fast, predictable runs, and budget more time for larger batches. mode=searchwith a rare/absent keyword still has to scan its whole candidate window before it can report zero matches - increase the run's timeout (Run options → Timeout) beyond the default if you search for uncommon terms with a largermaxItems.- No tag/category browse mode. Thingiverse's
/tag:<name>and category-browse pages don't expose server-rendered listing data (unlike individual thing/profile pages). Use thelicensefilter plusmode=search's category/subCategory keyword matching as a partial substitute. - No trending/popular mode. Thingiverse's
/popularand/newestlisting pages have no public, unauthenticated data feed.mode=latest(sourced from the public sitemap) is the closest reliable substitute for "what's new." mode=searchis a recent-catalog keyword filter, not a full-text index search - see the FAQ below and the input field description.
Thingiverse rate-limits individual item and profile page requests per IP address, which slows down large runs. Keep maxItems modest and increase your run timeout in Run Options when processing larger datasets. Because mode set to search scans recently published items rather than an all-time index, expand your search keywords if you receive fewer items than expected.
When should you not use Thingiverse 3D Model Scraper?
Do not use this Actor if you require a full-text search index across the complete historical archive of Thingiverse. Because Thingiverse offers no public full-text search API, search mode matches keywords against recently published designs rather than every file ever uploaded. If you need a complete historical index, you should construct a custom web crawler that processes the entire public sitemap structure over time. Additionally, if you only need to inspect a single public model occasionally, manually visiting the web page is faster and costs nothing.
What should you check before trusting the output?
- Stop the run if mode is set to search and maxItems is returned as empty despite selecting a broad, common keyword.
- Check that every object with recordType equal to thing includes a non-null thingUrl and a valid imageUrl.
- Ensure that records emitted under mode byUser contain a non-empty username and profileUrl.
- Filter out any returned thing records where likesCount falls below your set minLikes value.
- Confirm that the license string matches your specified filter when license is set to something other than any.
None of this proves a record is correct. It gives a scheduled Thingiverse 3D Model Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How much does it cost to run Thingiverse 3D Model Scraper?
The Actor costs $0.005 per result, which is $5.00 per 1,000 results on the free tier. Subscription plans lower this cost down to $3.00 per 1,000 results on Gold, Platinum, and Diamond plans. Memory usage is charged separately per run.
Why does search mode return fewer records than maxItems?
Thingiverse lacks a public full-text search API. The Actor scans recently published designs and matches your keyword against titles, descriptions, and categories. If a specific keyword does not appear in recent uploads, fewer results are emitted.
Why does each design record only contain one image?
The scraper extracts the primary imageUrl published on the public page HTML. Full image galleries are rendered dynamically inside Thingiverse's interactive web application, which is not accessible through public page data.
What data does mode latest fetch?
Mode latest retrieves the most recently published designs by inspecting Thingiverse's public sitemap. It then hydrates each item with full metadata including title, author, category, and license information.
Are design tags included in the output records?
Tags are omitted because Thingiverse exposes them exclusively through its login-aware interactive web app. The Actor only returns fields directly present on the publicly published web page.
Where to go next
Start with the Thingiverse 3D Model Scraper Actor page for the current input schema, pricing tier, and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Search results scrapers covers 11 Actors in this family.
- Profile scrapers covers 115 Actors in this family.
Readers running Thingiverse 3D Model Scraper commonly pair it with:
- VLR.gg Valorant Esports Scraper Scrape Valorant esports data from VLR.gg - world and regional team rankings, match results, upcoming matches, and tournament events.
- Monday.com Marketplace Scraper Scrape the monday.com App Marketplace, browse featured, trending, editor's choice, and new apps; browse by category; or search for specific apps.
- Boxing Stats Scraper Scrape boxing fighter profiles and fight records using TheSportsDB free API.
- Dev.to Scraper Scrape Dev.to, the popular blogging platform for developers (forem.com).
- OpenAlex Scraper Scrape OpenAlex the free, open catalog of 250M+ scholarly works, authors, institutions, and concepts.
- FBref Football Statistics Scraper Scrape FBref (fbref.com) - the Football Reference site.
- UN Comtrade Scraper Scrape UN Comtrade international trade statistics - bilateral trade flows, commodity data by HS/BEC/SITC codes, import/export values, weights, and quantities for any country pair.
- Google Maps Popular Times Scraper Extract popular times busy-hours histograms and live busyness data from Google Maps places - all 7 days with hourly percentages, current busyness, and typical time spent.
Related guides:
- Open-Meteo Weather Scraper: $5.00 per 1,000 results (2026)
- Master of Malt Scraper: $5.00 per 1,000 results (2026)
- Vivian Health Jobs Scraper: Build 3 Robust Healthcare Data Playbooks
- United Real Estate Homes for Sale Scraper: 3 Practical Use Cases
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-23.
Actor last updated by its maintainers on 2026-08-03.
Run outcome figures cover the 30 day public window ending 2026-09-23.
● Featured actors
Thingiverse 3D Model Scraper
Scrape Thingiverse.com - the world's largest 3D-printing design repository. Look up 3D models by thing ID or share URL, browse the newest published designs, fetch maker/uploader profiles, or keyword-search across the whole catalog.
Run on Apify ↗