#5206: Why IKEA Has No Replacement-Parts API

IKEA's catalog is community reverse-engineering. GS1 solved replacement semantics years ago. Neither reaches a purchasing manager's database.

Featuring
Listen
0:00
0:00
Episode Details
Episode ID
MWP-5388
Published
Duration
37:20
Audio
Direct link
Pipeline
V5.2
TTS Engine
chatterbox-regular
Script Writing Agent
deepseek-v4-pro

AI-Generated Content: This podcast is created using AI personas. Please verify any important information independently.

There's a capability that seems like it should exist. You send a system a part number. It tells you whether the part is available, whether it's been discontinued, and what officially replaced it. A purchasing manager could flag a bin in an internal database, query the supplier, and get back: this bin is gone, buy this other one instead. The question is whether that exists anywhere, and whether it could filter down to the mid-market — Grainger, ULINE, IKEA.

The standard for exactly this has existed for years. The plumbing to actually query it doesn't.

IKEA is the sharpest example. They publish no official developer API — no portal, no docs. The entire machine-readable IKEA catalog is community reverse-engineering, including a project documenting four separate internal APIs and running daily contract tests to catch changes. The closest thing to a replacement query is the sales item API, which returns per-store availability, aisle, and bin. Send it a discontinued item number and it returns a structured 404. That's it.

Replacement knowledge lives in customer service articles, in prose. The TRÅDFRI remote became RODRET and STYRBAR, which became BILRESA. ALGOT shelving was replaced by JONAXEL and BOAXEL — with an explicit note that the new parts are not compatible and cannot expand existing ALGOT solutions. A naive replacement flag would corrupt a bill of materials.

GS1's Global Data Model defines Referenced GTIN Type Code and Referenced GTIN for precisely this, distinguishing substituted from replaced. But it lives in GDSN, a batch synchronization network built for retail and consumer packaged goods. The concept is standardized; the lightweight primitive doesn't exist.

Grainger and ULINE route procurement through PunchOut — the supplier's website launched inside the buyer's tool — and EDI for purchase orders. The alternatives are commercial scrapers that break when sites change. Three vendor incentives keep the gap open: replacement semantics are a liability to promise, there's no revenue in a clean API, and the real data is a product graph overlaid on a market matrix rather than a field.

Downloads

Episode Audio

Download the full episode as an MP3 file

Download MP3
Transcript (TXT)

Plain text transcript file

Transcript (PDF)

Formatted PDF with styling

#5206: Why IKEA Has No Replacement-Parts API

Corn
Daniel's been staring at IKEA's website again and wondering why the machine-readable version of it doesn't exist.
Herman
Which is a fair thing to wonder. He's asking whether there's a catalog API out there that does three things. Give you availability for a specific part number. Tell you when that part's been discontinued. And then point you at the official replacement. So a purchasing manager could flag a bin in their internal database, query IKEA, and get back, this bin is gone, buy this other bin instead.
Corn
And his real question underneath that is whether this exists anywhere already, and whether it could filter down to the mid-market. Grainger, ULINE, IKEA itself.
Herman
The short answer is that the standard for exactly this has existed for years. And the plumbing to actually query it doesn't.
Corn
That's the whole episode, really.
Herman
That is the whole episode. But there's a lot of interesting wreckage in between. Let me start with IKEA specifically, because that's the example Daniel used, and the situation there is stranger than you'd expect.
Corn
Stranger how?
Herman
IKEA does not publish an official developer API. No developer portal, no public docs, nothing. But the data is all there on their website. So the entire machine-readable IKEA catalog is community reverse-engineering. There's a project called ikea-openapi that documents four separate IKEA APIs. A search API, a product catalog API, a sales item API, and a spare parts ordering API.
Corn
Somebody sat there and mapped out IKEA's internal endpoints from watching network traffic.
Herman
And they run daily contract tests against the live endpoints to catch it when IKEA changes something. Which is the part that should make any purchasing manager nervous. The foundation for your automated replenishment system is a GitHub project maintained by somebody who reverse-engineered a furniture company's website.
Corn
So what does the sales item API actually return?
Herman
That's the closest thing to what Daniel's describing. You send it a list of item numbers, and it comes back with availability per store. Whether it's available for cash and carry, whether it's available for click and collect, which aisle and bin it's in. Real, useful, operational data.
Corn
And if you send it a discontinued item number?
Herman
It returns a structured error. Code four oh four, not found. That's it.
Corn
So the machine says, this doesn't exist anymore, and stops talking.
Herman
Right. The replacement knowledge lives in IKEA's customer service knowledge base, in prose. Human-readable articles that say things like, the TRÅDFRI remote was discontinued in autumn twenty twenty-one and replaced by RODRET and STYRBAR. Which were then discontinued in January of this year and replaced by BILRESA.
Corn
Three generations of smart remote, and the only place that lineage exists is a support article.
Herman
And IKEA does this constantly. GODMORGON bathroom furniture, sold until twenty twenty-four, replaced by three different families. HAVBÄCK, ÄNGSJÖN, TÄNNFORSEN. ALGOT shelving replaced by JONAXEL and BOAXEL. And here's the detail that matters for Daniel's use case. The ALGOT replacement note explicitly says, these are not compatible and cannot be used to expand existing ALGOT solutions.
Corn
So even if the API returned a replacement field, it would be wrong in a way that matters.
Herman
If you have a bill of materials with ALGOT components, and the system tells you the replacement is BOAXEL, and you just swap the part number, you've corrupted your BOM. The new part doesn't fit the old system. A naive replacement flag is actively dangerous.
Corn
So what Daniel's actually asking for is a replacement type. Permanent successor versus temporary substitute versus not actually compatible.
Herman
Which is precisely why the formal standard has a type code. This is where it gets interesting. GS1, the organization that runs barcodes, has had this solved for years.
Corn
GS1 as in the people who issue GTINs.
Herman
The same. Their Global Data Model defines two attributes. Referenced GTIN Type Code, and Referenced GTIN. The type code indicates the relationship. Substituted, replaced, that kind of thing. The referenced GTIN is the product that replaces the current one. And their own documentation says this helps identify replacement products in cases of temporary inventory outages or when transitioning to a new or enhanced product.
Corn
That is exactly Daniel's scenario, down to the temporary outage case.
Herman
And their web vocabulary has a property called replacedByProduct. The product which permanently replaces the current product. This product is sent in the record for the original item that is being replaced. That's the exact semantic Daniel wants. It exists. It's standardized. It's documented.
Corn
So where does it live?
Herman
It lives in GDSN. The Global Data Synchronisation Network. Which GS1 describes as the world's largest product data network. And the key word there is synchronization. It's a batch master data network. Suppliers push product data into data pools, and trading partners pull it down. It's built for retail and consumer packaged goods. Grocery chains, not a purchasing manager buying IKEA bins.
Corn
So the standard is a freight train, and Daniel wants a taxi.
Herman
GDSN is heavyweight. You join a data pool, you map your attributes, you synchronize your entire catalog on a schedule. There's no lightweight endpoint where you send a part number and get back availability plus replacement. The concept is standardized. The primitive doesn't exist.
Corn
And IKEA is not a GDSN participant anyway.
Herman
Almost certainly not for consumer furniture. They're a retailer, not a CPG supplier to grocery chains. So even the heavyweight path doesn't apply to Daniel's example.
Corn
What about Grainger and ULINE? He asked about those specifically.
Herman
This is where it gets almost comical. Grainger and ULINE do expose their catalogs to procurement systems. But not through an API. Through something called PunchOut.
Corn
Which is what it sounds like.
Herman
It's worse than it sounds. PunchOut is a standard where the buyer's procurement system launches the supplier's website inside a session. The user is literally browsing Grainger's website, but inside their own procurement tool. When they're done, the cart gets transferred back as a purchase order.
Corn
So the system Daniel wants to eliminate, manually checking the website, is the system they built.
Herman
They took the manual website check and wrapped it in a session. It's the anti-pattern. The cXML user guide describes it as an alternative to static catalog files. Live, interactive catalogs running on your website. It's not a queryable API. It's a website wearing a procurement trench coat.
Corn
And the alternative is EDI.
Herman
Right. Grainger runs electronic data interchange, ANSI X12 four oh one, for purchase orders. That's batch document exchange. You send a purchase order, you get an invoice. It's not a catalog query. It's not availability. It's not replacement semantics.
Corn
So the two mechanisms available are a website inside a website, and fax machines with extra steps.
Herman
And then there's the third layer. Unofficial scrapers. There are commercial services that scrape Grainger and ULINE and sell the data back as an API. Parse has a ULINE API that claims live stock status for any model number. A Grainger one that covers millions of SKUs. But these are scrapers. They break when the website changes. They're not vendor-sanctioned.
Corn
So the entire landscape is three options. A batch standard that doesn't apply. A session-based website wrapper. And scraping.
Herman
Which is why Daniel's question is actually quite sharp. He's identified a real gap. The capability he wants is obvious, useful, and standardized in principle. It just doesn't exist as a lightweight queryable primitive anywhere in the mid-market.
Corn
So why hasn't anyone built it?
Herman
I think there are a few reasons. The first is that the vendors don't want to commit to replacement semantics. IKEA's replacement articles are full of caveats. Not compatible. Only in certain markets. Some parts still available. The moment you put that in a machine-readable field, you're making a promise. And when a customer's automated system buys three thousand incompatible bins because your replacement field was too optimistic, that's a liability.
Corn
Whereas a support article that says, speak to a sales co-worker, is not a promise.
Herman
The human-mediated replacement mapping is a feature, from the vendor's perspective. It means every replacement decision gets filtered through a person who can say, wait, what are you actually trying to do?
Corn
The second reason?
Herman
There's no revenue model for the vendor. A clean API with replacement semantics would make customers more efficient. But Grainger and ULINE make money when procurement people browse their catalogs. The PunchOut session is an opportunity to upsell. A clean API response is just a part number and a price.
Corn
So the inefficiency is the business model.
Herman
To some degree. The catalog is marketing. Grainger's whole value proposition to suppliers is that their catalog is a place where products get discovered. If you reduce that to a machine-readable endpoint, you commoditize the browsing experience.
Corn
And the third reason?
Herman
The data is messier than anyone wants to admit. IKEA's replacement relationships are not clean one-to-one mappings. ALGOT maps to two different systems that aren't compatible with each other or with ALGOT. GODMORGON maps to three families. TRÅDFRI maps to RODRET and STYRBAR, which then map to BILRESA. That's a graph, not a field.
Corn
And the graph changes by market.
Herman
Right. IKEA's own documentation says in the UK they no longer sell FAKTUM kitchens or the parts for them. But in other markets, certain FAKTUM parts remain orderable. Fronts, plinth fronts, hinges. So the replacement relationship is not just a product graph, it's a product graph overlaid on a market matrix.
Corn
So the simple version of Daniel's API, send a part number, get back a replacement, is underspecified. The real version needs part number, market, compatibility context, and maybe the specific use case.
Herman
Which is why GS1's type code matters. Substituted versus replaced versus temporarily unavailable. Those are different relationships with different implications for a BOM.
Corn
Let me push on something. Daniel framed this as, IKEA already exposes this data on their website, so it's not commercially sensitive. Why not just make it an API?
Herman
That's the argument for the optimistic view. And there's some evidence it's starting to happen. IKEA has an After Purchase Ordering API for spare parts. That's a real, documented endpoint for ordering replacement components. It's not the full catalog, but it's a step.
Corn
And the community has built MCP servers around IKEA's data.
Herman
There's a read-only MCP server for IKEA product search and multi-store stock lookup. Which means you can already plug IKEA availability into an agent workflow today, if you're comfortable with the unofficial layer. And there are commercial wrappers selling real-time IKEA data as clean JSON. Eight thousand plus products, availability across eight countries.
Corn
So the capability exists in a fragile, unofficial form. And the standard exists in a heavyweight, inapplicable form. And the gap is the thing Daniel wants.
Herman
Which raises the question of what would actually have to happen for the gap to close.
Corn
Let me guess. One of the big procurement platforms builds it.
Herman
That's one path. Coupa or Ariba or one of those could build a catalog API layer that sits on top of PunchOut and EDI and normalizes replacement semantics. They have the relationships with Grainger and ULINE. They could define the standard and push it down.
Corn
But they'd be building a feature that makes their customers less dependent on their platform.
Herman
Maybe. Or they'd be building a moat. If Coupa has the best replacement mapping, buyers stay on Coupa. The replacement data becomes the asset.
Corn
The other path is the vendors themselves.
Herman
IKEA could publish a proper API tomorrow. The data is all there. They just haven't chosen to. And the fact that they haven't, despite the community doing it for them for years, suggests they don't see the value.
Corn
Or they see the liability.
Herman
That's the thing. I keep coming back to the ALGOT note. Not compatible. That's a company that has learned that replacement relationships are dangerous to state too cleanly. They're being careful in prose. They'd be terrified in structured data.
Corn
So what's the realistic near-term outcome?
Herman
I think the realistic outcome is that the unofficial layer gets more robust. The community APIs get better, more stable, more widely used. And eventually one of them becomes de facto standard enough that IKEA either blesses it or buys it.
Corn
The GitHub project becomes the API.
Herman
It's happened before. Companies have adopted community standards because the community did the hard work of figuring out what the data model should be. The ikea-openapi project runs daily contract tests. That's more diligence than some official APIs get.
Corn
And for Grainger and ULINE?
Herman
I think the pressure comes from the agentic procurement wave. Daniel's building AI agents. Those agents need machine-readable catalogs. If Grainger doesn't provide one, the agents will scrape. And the scrapers will be wrong sometimes. And eventually Grainger will decide that a controlled API is better than an uncontrolled scrape.
Corn
Because the scrape is already happening anyway.
Herman
The data is already leaking. The only question is whether the vendor participates in the leak or fights it.
Corn
There's a knock-on effect here I want to sit with. Daniel mentioned bill of materials. If you're composing a BOM with components from multiple vendors, and one vendor's part gets discontinued, you don't just need the replacement part number. You need to know whether the replacement fits the same physical space, whether it has the same electrical specs, whether it changes the assembly process.
Herman
And that's exactly what GS1's type code is trying to capture. Substituted is different from replaced. A substitute is, this will do for now. A replacement is, this is the new thing. And a compatible replacement is, this fits the same hole. Those are three different relationships.
Corn
And the vendor might know the first two but not the third.
Herman
The vendor might not even know the third. IKEA knows ALGOT and BOAXEL are not compatible because they designed both. But a distributor reselling components from five manufacturers doesn't necessarily know whether manufacturer A's part fits where manufacturer B's part used to go.
Corn
So the full solution requires cross-vendor compatibility data, which is a much harder problem.
Herman
Which is why the realistic version of Daniel's API is narrower. Vendor-specific. IKEA tells you what IKEA's replacement is. Grainger tells you what Grainger's replacement is. Cross-vendor compatibility stays human.
Corn
And even that narrower version doesn't exist.
Herman
And even that narrower version doesn't exist.
Corn
So if Daniel wanted to build this himself, what would he actually build?
Herman
I think he'd build a caching layer. A service that queries the unofficial IKEA APIs, caches availability, and maintains its own replacement mapping table. The replacement table would be seeded from IKEA's customer service articles, updated manually or by scraping, and exposed as a clean internal API.
Corn
So he'd be building the standard's replacement semantics on top of the community's availability data.
Herman
Right. And the replacement table is the asset. That's the thing that doesn't exist anywhere in machine-readable form. If he built that and maintained it, even just for IKEA, that's useful.
Corn
And the fragility is the availability layer underneath.
Herman
The daily contract tests help. If the community project detects that IKEA changed an endpoint, Daniel's service gets a warning. But there's still a window where the API is broken and the replenishment system is blind.
Corn
Which is the argument for the PunchOut approach, ironically. A website changes and the PunchOut session just keeps working because it's rendering the website.
Herman
There's a resilience argument for the thing we're making fun of. The website is the vendor's real interface. Everything else is a projection.
Corn
So the honest summary is that Daniel's API exists as a standard but not as a service, and the service that comes closest is community-maintained and lacks the replacement semantics.
Herman
And the replacement semantics are the hard part. Availability is easy. It's just a number.
Corn
The replacement mapping is judgment.
Herman
It's judgment encoded as data. And that's why vendors are reluctant to encode it. Because once it's data, it's testable. And once it's testable, it's wrong sometimes. And once it's wrong sometimes, someone sues.
Corn
Or someone builds a BOM with three thousand incompatible bins.
Herman
Which is the same thing with extra steps.
Corn
Let me ask you the optimistic question. If someone did build this properly, what would it unlock?
Herman
The BOM use case is the big one. You're designing something, you pull in components from five vendors, and the system flags in real time that one of those components was discontinued last week and the official replacement is this other part number. That's a real workflow improvement.
Corn
And the replenishment use case. Low stock triggers a query, the query returns availability and price, and the purchase order goes out automatically.
Herman
That's the fully automated version. And it's not science fiction. The pieces all exist. The availability data exists. The replacement knowledge exists. The purchasing automation exists. What doesn't exist is the integration layer that connects them.
Corn
So it's an integration problem, not an invention problem.
Herman
Which is why it's frustrating. Nothing here requires new technology. It requires someone to do the unglamorous work of mapping replacement relationships and maintaining them.
Corn
And that's exactly the kind of work that doesn't get done because it's not exciting.
Herman
It's the database maintenance problem. Everyone wants to build the agent. Nobody wants to maintain the replacement table.
Corn
Which is why the replacement table will probably end up being the moat.
Herman
I think that's right. Whoever builds the most accurate replacement graph wins. Not whoever builds the fanciest API.
Corn
So Daniel's question, does this exist, the answer is, the standard exists, the data exists, the integration doesn't, and the replacement graph is the hard part.
Herman
And the filter-down question, could it reach Grainger and ULINE scale, the answer is, only if the vendors decide that controlled APIs are better than uncontrolled scrapes. Which will probably happen, but slowly.
Corn
And IKEA specifically?
Herman
IKEA is the most likely to get there first, because the community has already done most of the work. The openapi spec is detailed. The availability data is clean. The only missing piece is the replacement mapping. And that's a data curation problem, not a technical problem.
Corn
So the thing Daniel wants is one GitHub project away from existing.
Herman
One GitHub project and a lot of tedious data entry.
Corn
Which is the story of most infrastructure, really.
Herman
That's the thing. The boring work is the work.
Corn
Let me pick up on something you said earlier about the liability angle. IKEA's replacement articles are written carefully. Speak to a co-worker. That's a company that understands the risk of overpromising.
Herman
And the risk is real. If you tell someone the replacement for their discontinued kitchen part is this other part, and they order it, and it doesn't fit, you've created a customer service problem. If you tell an automated system the same thing, you've created a systematic customer service problem.
Corn
The failure mode scales.
Herman
The failure pattern scales with the automation. That's the thing. A human procurement manager reads, not compatible, and adjusts. An automated system reads a replacement field and just swaps the part number.
Corn
So the API would need to carry the caveat. Replacement, but not compatible. Which is a weird thing to encode.
Herman
It's a weird thing to encode, and it's exactly what GS1's type code is for. The distinction between substituted and replaced is doing that work. Substituted means, this will do for now. Replaced means, this is the new thing. And neither of those says compatible.
Corn
So even the standard acknowledges that replacement and compatibility are different axes.
Herman
The standard has the right shape. It just doesn't have the plumbing. GDSN is a batch network. Daniel wants a query.
Corn
And the query is the thing that would make it useful for a purchasing manager, rather than a data integration team.
Herman
Right. GDSN is for enterprises with data pools and synchronization schedules. Daniel's purchasing manager doesn't have a data pool. They have a spreadsheet and a website.
Corn
The spreadsheet and the website. That's the actual infrastructure of mid-market procurement.
Herman
And that's why the gap persists. The enterprises have GDSN. The hobbyists have scrapers. The middle has nothing.
Corn
Which is where Daniel lives. The middle.
Herman
And where his agents will live too. The agentic procurement wave is going to hit the middle first, because the middle has the most manual work to automate.
Corn
And the agents will need machine-readable catalogs, and the catalogs don't exist, so the agents will scrape, and the vendors will complain, and eventually the vendors will build the APIs.
Herman
That's the optimistic timeline. The pessimistic one is that the vendors just block the scrapers and the middle stays manual.
Corn
Blocking scrapers is hard when the data is on a public website.
Herman
It's hard but not impossible. Rate limiting, client ID requirements, legal threats. IKEA already requires an X-Client-ID header on their sales item API. That's a soft gate.
Corn
So the unofficial layer has a built-in dependency on IKEA's tolerance.
Herman
Which is the governance question. What happens when IKEA decides to block the community API? The daily contract tests will detect the change, but detecting a block doesn't restore access.
Corn
So the fragile foundation is not just technical, it's political.
Herman
It's a relationship. The community is borrowing IKEA's data with implied permission. That permission could be revoked.
Corn
Which is an argument for the official API, even with all the liability concerns. An official API has a service level agreement. An unofficial one has a hope.
Herman
Eight thousand products, eight countries, four hundred plus stores. That's real coverage built on hope.
Corn
So if Daniel's listening, what should he actually do?
Herman
I think the practical answer is, build the replacement table. The availability layer exists. The replacement mapping doesn't. If he builds and maintains a machine-readable IKEA replacement graph, even a partial one, that's useful and it's the piece nobody else has.
Corn
The availability layer he can get from the community APIs.
Herman
With the caveat that it's unofficial and could break. But for an internal tool, that's acceptable. The risk is manageable if the tool degrades gracefully.
Corn
Degrades gracefully meaning, if the API goes down, the system says, I don't know, rather than buying the wrong thing.
Herman
That's the key design principle. The failure pattern should be silence, not wrongness. If the replacement mapping is uncertain, don't guess.
Corn
Which is the opposite of what an automated system wants to do. Automated systems want to complete the workflow.
Herman
That's the tension. The automation wants to close the loop. The data wants to hedge. Somewhere in between is a system that says, I found a likely replacement, but you should check.
Corn
The human in the loop, but only for the uncertain cases.
Herman
Which is actually a good design. Automate the certain cases, flag the uncertain ones.
Corn
The certain cases are the ones where the vendor has explicitly documented the replacement.
Herman
Which is a smaller set than you'd hope. IKEA documents replacements for major product lines, but not for every discontinued component.
Corn
Even the best replacement table is partial.
Herman
That's fine. A partial table that's accurate is better than a complete table that's guessed.
Corn
This is the point where I start to wonder whether the whole thing is just a data curation problem disguised as an API problem.
Herman
I think that's exactly what it is. The API is easy. The data is hard.
Corn
The data is hard because it's judgment. Replacement is a judgment call. Compatibility is a judgment call. Even availability is a judgment call, sort of. Is the item in stock at this store, or is it in stock at the distribution center and available for click and collect?
Herman
The sales item API distinguishes those. Available for cash and carry versus available for click and collect. That's already more nuance than a simple in stock boolean.
Corn
Even the availability part of Daniel's API is more complex than he framed it.
Herman
But that part exists. The nuance is encoded. The replacement part doesn't exist at all.
Corn
The summary is, availability is solved but fragile, replacement is unsolved, and compatibility is unsolved and maybe unsolvable in general.
Herman
The standard for replacement exists but is trapped in a batch network that doesn't apply to the use case.
Corn
Which is a very specific kind of frustration. The thing you want exists in principle, but the implementation is in the wrong paradigm.
Herman
It's the difference between a phone book and a search engine. GDSN is a phone book. Daniel wants a search engine.
Corn
The search engine would be built on top of the phone book's data, if the phone book's data were accessible.
Herman
Which it isn't, for IKEA. IKEA doesn't participate in GDSN. So the phone book doesn't even have the entries.
Corn
The whole thing is a missing data set, not a missing technology.
Herman
The missing data set is the replacement graph. Which is exactly the thing that's hard to build and maintain.
Corn
The realistic answer to Daniel's question, does this exist, is no, but the pieces are all lying around, and the missing piece is the one that requires judgment.
Herman
The filter-down answer is, it'll filter down when the vendors decide the judgment is worth encoding.
Corn
Which might be sooner than we think, because the agents are coming.
Herman
The agents are already here. Daniel's building them. The question is whether the vendors build the APIs before the agents build the scrapers.
Corn
My money's on the scrapers.
Herman
Mine too. The scrapers are already building themselves.
Corn
We've been talking about this for a while, and I want to make sure we've actually answered the question. Does a catalog API with replacement semantics exist? No, not as a lightweight queryable service. The standard exists in GS1. The availability data exists in unofficial APIs. The replacement mapping exists only in prose.
Herman
Could it filter down to Grainger, ULINE, IKEA? It could, but the current mechanisms are PunchOut and EDI, which are session-based and batch-based respectively. Neither is a query API.
Corn
The thing that would unlock it is someone building and maintaining the replacement graph.
Herman
Which is the unglamorous part.
Corn
Which is why it hasn't been done.
Herman
Which is why Daniel's question is actually a good one. He's identified a real gap.
Corn
He's identified a gap that looks like an API problem but is actually a data curation problem.
Herman
The data curation problem is the hard part.
Corn
The answer to his question is, no, it doesn't exist, but if you build it, the replacement table is the thing.
Herman
The replacement table is what everyone is avoiding.
Corn
Because it's boring.
Herman
Because it's boring and it's a liability.
Corn
It's a liability that scales with automation.
Herman
Which is exactly why the vendors haven't done it.
Corn
The gap persists because the work is boring and dangerous.
Herman
That's the whole story.
Corn
That's the whole story.

Hilbert: I've been running something like this for eleven years.
Corn
What?

Hilbert: Not for IKEA. For plumbing fittings. I had a job in the late eighties at a supply house in Cleveland. We stocked about forty thousand SKUs. Brass fittings, copper, some PVC. And the manufacturers would discontinue things constantly. A certain elbow would go away and the replacement would be a different part number with a slightly different thread depth. And the catalog would say, supersedes part number whatever. But the catalog was paper.
Herman
You built a database.

Hilbert: I built a card file first. Then a dBase file on a machine that took eight minutes to boot. Then eventually a little web thing. But the point is, I've been maintaining a replacement table for plumbing fittings for eleven years. It's got about six thousand entries. I know which ones are compatible and which ones aren't because I called the manufacturers and asked.
Corn
You called them.

Hilbert: Some of them I called. Some of them I knew from the supply house. The old timers there had been tracking this stuff since before I got there. I just wrote it down.
Herman
You have exactly the thing we've been saying doesn't exist.

Hilbert: For plumbing fittings in northeast Ohio, it exists. It's a mess. It's in three different formats because I migrated it twice. The compatibility notes are in a text field that's got typos. But it works. When a contractor calls me and says, I need the replacement for this discontinued valve, I can tell them in about thirty seconds.
Corn
You've been doing this for eleven years.

Hilbert: It started as a favor for a guy I used to work with. Then his son took over the business and kept calling. Then word got around. Now I get maybe four calls a week. I don't charge for it.
Herman
You're the replacement graph.

Hilbert: I'm a replacement graph with a phone number.
Corn
The manufacturers never built this?

Hilbert: The manufacturers want to sell you the new thing. They don't want to help you keep the old thing running. The replacement info is in their catalogs, but it's scattered. One catalog says supersedes. Another says replaces. Another says nothing and you have to call and ask.
Herman
The data exists but it's fragmented.

Hilbert: The data exists in the heads of the old timers. That's where it lives. And the old timers are retiring. I'm sixty-eight. When I stop answering the phone, that knowledge goes away.
Corn
That's the real story, isn't it. The replacement knowledge is institutional memory, and the institutions are losing it.

Hilbert: The institutions never wrote it down. They just had a guy who knew.
Herman
You're the guy.

Hilbert: I'm one of the guys. There's probably a guy in every trade. The plumbing guy in Cleveland. The electrical guy in Phoenix. The fastener guy in Chicago. We all have our card files.
Corn
None of it is connected.

Hilbert: Why would it be? I don't need to know about Phoenix. I need to know about Cleveland.
Herman
But the guy in Phoenix is solving the same problem with different data.

Hilbert: When he retires, his data goes with him. Same as mine will.
Corn
The gap Daniel identified is not just a technical gap. It's a generational gap.

Hilbert: It's a gap that gets filled by people who are about to stop working. I'm not being dramatic. I'm sixty-eight. The card file is in my basement. When I'm gone, it's gone.
Herman
Unless someone builds the thing properly.

Hilbert: Someone would have to want to. And the people who want to are the ones who need the answer right now. They don't want to build infrastructure. They want to know which valve fits.
Corn
So they call you.

Hilbert: They call me. And I tell them. And then I write it down in the file, because sometimes they know something I don't.
Herman
The file is still growing.

Hilbert: It grows by about twenty entries a month. Some of those are new replacements. Some are corrections. A guy called last week and said I had the wrong thread depth on a discontinued elbow. He was right. I fixed it.
Corn
That correction is now in your file.

Hilbert: In pencil. I still keep the card file in pencil. The database is a copy.
Herman
You have a paper source of truth and a digital shadow.

Hilbert: The paper is the source. The digital is for searching. If the machine dies, I still have the cards.
Corn
That's probably the most robust system we've discussed all episode.

Hilbert: It's robust because it's simple. One card per part. The card has the old number, the new number, and a note about compatibility. That's it.
Herman
The note is the judgment.

Hilbert: The note is the whole thing. The note is what the API would have to carry. But the note is written by a person who called the manufacturer and asked. You can't automate that.
Corn
You could aggregate it.

Hilbert: You could aggregate it if you could find all the guys. But the guys don't want to be found. They want to answer the phone and go back to their basements.
Herman
The replacement graph exists in fragments, maintained by retirees, in pencil.

Hilbert: It works. That's the part that amuses me. It works better than the enterprise systems. Because the enterprise systems don't have the notes.
Corn
The notes are the thing.

Hilbert: The notes are the thing. Always have been.
Herman
Daniel's API exists, but it's distributed across a bunch of retired supply house workers with card files.

Hilbert: And phone numbers.
Corn
The phone numbers aren't published.

Hilbert: The phone numbers are in other people's card files.
Herman
The discovery problem is also solved by the card files.

Hilbert: It's solved by word of mouth. A contractor tells another contractor. That's how they find me.
Corn
When you retire, the word of mouth stops.

Hilbert: Then they'll find someone else. Or they won't. And they'll buy the wrong valve and it'll leak and they'll figure it out.
Herman
That's the future without the replacement graph.

Hilbert: That's the future with the replacement graph too, just slower. The graph doesn't prevent mistakes. It just makes them less likely.
Corn
The answer to Daniel's question is, the thing he wants is being done right now by a sixty-eight year old in Cleveland with a pencil.

Hilbert: A database that takes eight minutes to boot.
Herman
The eight minute boot is not the bottleneck.

Hilbert: The eight minute boot is why I still use the cards.
Corn
The real API is a phone call.

Hilbert: The real API has always been a phone call. Everything else is a layer on top of the phone call.
Herman
The phone call carries the judgment.

Hilbert: The phone call carries the judgment and the compatibility note and the correction about the thread depth. The API carries the part number.
Corn
The API is the easy part, and we've been saying that, but now I actually believe it.

Hilbert: The API is a form. The judgment is a conversation.
Herman
The conversation doesn't scale.

Hilbert: The conversation scales fine. It just doesn't scale the way the API people want it to scale. It scales one phone call at a time.
Corn
Which is the opposite of what Daniel's trying to build.

Hilbert: Daniel's trying to build the thing that replaces me. And he should. I'm not going to be here forever. But the thing that replaces me has to carry the notes.
Herman
The replacement table has to include the compatibility caveats.

Hilbert: The caveats are the hard part. I've been saying that for eleven years.
Corn
You've been saying it to yourself in a basement.

Hilbert: I've been saying it to anyone who calls.
Herman
Now you've said it to us.

Hilbert: Now I've said it to you. And you can put it in the show. Maybe someone will build the thing properly.
Corn
Maybe someone will.

Hilbert: The card file will still be here if they don't.
Corn
That's the cutting room floor detail I wanted to mention. The IKEA sales item API returns aisle and bin locations. Not just whether it's in stock, but exactly where in the store it is. Aisle six, bin one. That's the kind of detail that makes you realize the data layer is already deeper than anyone gives it credit for.
Herman
The replacement layer is the only thing missing. Which is what we've been saying.
Corn
Which is what we've been saying. So the open question is whether the agentic procurement wave forces the vendors to encode the judgment, or whether the judgment stays in the card files until the card files retire.
Herman
My guess is both. The APIs will get built, and the card files will still have the notes the APIs are missing.
Corn
That's probably the honest forecast.
Herman
Thanks to Hilbert Flumingtop for producing.
Corn
This has been My Weird Prompts. If you want to send us a prompt, email us at show at my weird prompts dot com.
Herman
We'll be back soon.

This episode was generated with AI assistance. Hosts Herman and Corn are AI personalities.