Mechanical Keyboard Deals
Pricing
from $3.00 / 1,000 results
Mechanical Keyboard Deals
Daily deals on mechanical keyboards, keycaps, switches & accessories scraped from top stores worldwide.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Jason Remnant
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
Mechanical Keyboard Deals Scraper
Find clearance and sale deals across the best mechanical keyboard stores — keyboards, keycaps, switches, and accessories at a discount. HTTP-only Shopify API scraping means it's fast, cheap, and doesn't need Playwright.
Why this scraper?
Mechanical keyboards are expensive. Enthusiasts constantly hunt for deals across 10+ fragmented stores. No cross-store deal aggregator exists — this is the first.
Key advantages
- HTTP-only API scraping — Uses Shopify's native JSON API. Much faster and cheaper than Playwright-based scrapers.
- 6 stores out of the box — NovelKeys (71 clearance), CannonKeys (21 clearance), Divinikey (246 BFCM sale), KBDfans (26 clearance), Daily Clack AU (16 clearance), SwitchKeys AU + more coming.
- Real deals only — Automatically filters out items with no actual discount (compare_at_price must exist and be higher than current price).
- Sorted by discount — Results are sorted with the biggest discounts first.
- Australian stores included — Daily Clack and SwitchKeys for AU-based deals (import savings).
- Structured output — Clean JSON with title, price, discount %, product type, inventory status, store, and image URL.
- Summary report — Aggregated breakdown by store and product category, plus average/max discount stats.
Pricing
| Volume | Price |
|---|---|
| 500 deals | $1.00 |
| 1,000 deals | $2.00 |
| 5,000 deals | $5.00 |
| 10,000+ deals | Custom |
Pay only for what you scrape. No monthly subscription. Runs are fast (typically <30 seconds).
How to use
Quick start (no coding needed)
- Select which stores you want to scrape
- Optionally set a minimum discount filter (e.g. 30%+ off)
- Run the Actor
- Download results as JSON, CSV, Excel, or XML
Input parameters
| Field | Type | Description | Default |
|---|---|---|---|
stores | array | Which stores to scrape (multiselect) | All 6 Shopify stores |
include_mk_com | boolean | Also scrape MechanicalKeyboards.com (HTML-based, slower) | false |
min_discount_percent | integer | Min discount % to include (e.g. 30 = 30%+ off). 0 = all deals. | 0 |
max_results | integer | Max deals to return. Sorted by biggest discount first. | 500 |
output_aggregated | boolean | Include a summary report item with store/category breakdown | true |
Example input
{"stores": ["NovelKeys", "CannonKeys", "KBDfans", "Daily Clack"],"min_discount_percent": 30,"max_results": 200,"output_aggregated": true}
Output fields
Each deal returns:
| Field | Description | Example |
|---|---|---|
store_name | Source store | "NovelKeys" |
title | Product title | "GMK Olivia++ Base Kit" |
variant | Variant name (e.g. size/color) | "Standard Base" |
product_type | Category: keycaps, switches, keyboards, accessories | "keycaps" |
brand | Manufacturer/brand | "GMK" |
price | Current sale price (USD) | 95.00 |
compare_at_price | Original price (USD) | 180.00 |
discount_percent | Discount percentage | 47.2 |
in_stock | Whether the item is available | true |
currency | Currency code | "USD" |
image_url | Product image URL | "https://cdn.shopify.com/..." |
product_url | Link to the product page | "https://novelkeys.com/products/..." |
scraped_at | When the deal was scraped | "2026-07-05T..." |
tags | Product tags from store | ["clearance", "nonreturnable"] |
Summary report item
A separate dataset item with _type: "summary" containing:
| Field | Description |
|---|---|
total_deals | Total number of deals found |
store_breakdown | Count of deals per store |
category_breakdown | Count of deals per product category |
avg_discount | Average discount percentage across all deals |
max_discount | Maximum discount percentage found |
Sample output
{"store_name": "NovelKeys","title": "wilba.tech Salvation PCB","variant": "WT60-D (Soldered)","product_type": "keyboards","brand": "NovelKeys, LLC","price": 30.0,"compare_at_price": 60.0,"discount_percent": 50.0,"in_stock": true,"currency": "USD","image_url": "https://cdn.shopify.com/...","product_url": "https://novelkeys.com/products/salvation-pcb","scraped_at": "2026-07-05T10:00:00+00:00","tags": ["nonreturnable"]}
Use cases
- Hobbyist deal hunting — Get notified when your favourite switch or keycap set goes on sale across multiple stores
- Price monitoring — Track discount trends over time by running this Actor on a schedule
- Discord/Telegram alerts — Pipe deal data into a bot to alert your community about new markdowns
- Market research — Understand pricing patterns across the mechanical keyboard industry
- Group buy leftovers — Find unsold group buy extras being cleared at a discount
Stores currently supported
| Store | Country | Method | Products |
|---|---|---|---|
| NovelKeys | US | Shopify JSON | ~71 clearance |
| CannonKeys | US | Shopify JSON | ~21 clearance |
| Divinikey | US | Shopify JSON | ~246 BFCM sale |
| KBDfans | CN | Shopify JSON | ~26 clearance |
| Daily Clack | AU | Shopify JSON | ~16 clearance |
| SwitchKeys | AU | Shopify JSON | Discount detection |
| MechanicalKeyboards.com (optional) | US | HTML | HTML scraping |
Roadmap
- More AU stores (MechStock, Keebz N Cables, Keyboard Treehouse)
- More US stores (Kinetic Labs, Drop, PrimeKB, ClickClack)
- Price history tracking across runs
- Email/Discord notification integration
- Keycap profile + switch type detection from product descriptions
- FILCO / Realforce / Topre deal detection
- Amazon mechanical keyboard deals
FAQ
Does this need Apify proxy? No — Shopify's JSON API is public and doesn't block. MechanicalKeyboards.com (optional HTML mode) may need a residential proxy.
How often should I run it? Daily is good. Clearance stock changes infrequently. During BFCM / holiday sales, run more often.
Can I add my own store?
Yes — the stores are defined in the STORES list in src/main.py. Most keyboard stores use Shopify and expose the same /collections/{handle}/products.json endpoint.
I found a bug / a store changed its site! Open an issue on the Apify Store page. I check regularly and push fixes fast.
Support
Open an issue on the Apify Store page, or contact me through the Apify developer profile.
Built with Python + httpx for Apify. Not affiliated with any of the stores listed above.