How SpecHawk Works
We watch the market so you don't have to. Here's how.
This page is the long version of how SpecHawk picks parts, ranks retailers, checks compatibility, and earns money. Read it once. Hold us to it.
Where prices come from
We pull prices from retailer feeds, not from screen-scraping retail pages. Best Buy ships through their official affiliate API. Newegg and B&H run through Rakuten Advertising and Avantlink — feeds light up once each affiliate program approves us, and Daily Builds will route to those retailers automatically the day approval lands.
Every price row is timestamped with the moment the source confirmed the value. We display that timestamp as last_source_confirmed_at — never an internal cache time. If a feed goes quiet, the freshness indicator turns amber within the hour. If you see a stale price, the page will tell you.
Part specifications come from Open Icecat (a vendor-supplied global product database) plus an in-house data layer for the fields Open Icecat doesn't carry — RAM module heights, CPU-cooler clearances, native 12V-2x6 connectors on power supplies, M.2-and-SATA conflict matrices on motherboards. The differentiating compatibility checks live or die on that in-house layer.
How retailers are ordered
Lowest price wins. Always. Ties broken alphabetically. Out-of-stock parts pushed below in-stock parts regardless of price.
The function that produces this ordering takes one input — the price rows for a part — and one input only. It does not see commission rates. It does not see retailer rank. It does not see promotional flags. A purity test in CI runs on every pull request to confirm sortRetailers() has no commission parameter, no merchant ID lookup, no commercial signal of any kind. If that test ever fails, the pull request can't merge.
We display the ordering exactly as the function returns it. The "BEST" chip lives on the lowest in-stock row. Out-of-stock rows are dimmed and pushed under the line, no matter how cheap the part used to be.
How compatibility is checked
Every build runs through a 28-check engine before it can be saved or published. The checks cover the unglamorous fits — RAM-stick height against the cooler's clearance, the GPU's length and slot count against the case's GPU bay, the PSU's connector inventory against the GPU and CPU power requirements, M.2-slot lane sharing with SATA ports, ATX vs SFX form factor against the case, and the native-12V-2x6 requirement on every Performance Pick or higher tier.
When a check fails, the build can't ship as-is. The solver swaps a part or surfaces the conflict to you — it doesn't quietly "round down" a fitment problem.
The whole engine is in-house TypeScript. CI lints the rules table on every pull request so a check can't accidentally regress. SFF case clearance results are labelled "estimated" rather than "exact" because manufacturer specs in the small-form-factor space drift ±5–10mm against real-world measurements.
How Daily Builds are made
Five tiers ship every morning at 7:00 AM Eastern Time: Budget, Sweet Spot, Performance, Workstation, Halo. Each tier is constrained by a target price band and a workload profile.
Behind the scenes:
- The solver enumerates valid builds per tier against the live catalog at 2:00 AM ET. Every part must be in stock at one of our retailers and must pass all 28 compatibility checks.
- An in-house pipeline composes a short rationale paragraph for each tier — the trade-offs, the pick reasoning, what the build is and isn't for. The pipeline is templated and bounded: same prompt structure every day, same five output fields. It is not a creative-writing tool.
- A curation step extracts every numeric and connector claim from the rationale and verifies each one against the structured part data. If a single claim doesn't match the catalog — wrong wattage, wrong socket, wrong connector — the rationale is replaced with a templated fallback, and the inaccurate draft is dropped.
- A 6:50 AM ET final stock check re-confirms availability across all five builds. If a part has gone out of stock between 2:00 AM and 6:50 AM, a top-five candidate fallback per slot swaps in a still-in-stock alternative without re-running the solver.
- At 7:00 AM ET, the day's builds publish.
Sometimes a tier doesn't make the cut. If two cases sold out and the cooler we wanted is back-ordered, we'd rather show no Sweet Spot for the day than ship one we aren't proud of.
How SpecHawk earns money
Affiliate commission. When you buy a part through one of our retailer links and complete the purchase, the retailer pays us a small percentage of the sale price.
The commission rate varies by retailer, but the retailer ranking does not. The lowest in-stock price wins regardless of which retailer pays us most — the sortRetailers() function is purity-tested in CI to enforce this. If Best Buy has a part for $5 less than the retailer that pays us a higher commission, Best Buy ranks first. Every time.
We don't run display ads. We don't sell sponsored placement. There are no "Featured" builds, no retargeting pixels, no commission-tier shopping. The methodology, the ranking, and the compatibility engine are the same for everyone — including visitors who never click a buy button.
What we don't do
- Sell, share, or rent your account email or saved builds.
- Accept sponsored placement or "Featured" treatment from any retailer or manufacturer.
- Run retargeting pixels, ad-network beacons, or third-party tracking scripts.
- Hide affiliate disclosures in the footer. The disclosure sits next to the buy button, not seven scrolls down.
- Fake countdowns, fake stock pressure, or "1 left in stock" theatrics.
- Pop a modal email-capture on first visit.
- Embed a floating chat widget that auto-opens.
If we ever cross any of these lines, we shipped a different product than the one we said we were building. Hold us to it.