You need a supplier's product data in your own system. Here are your real options.

28 October 2026 · 7 min read · ScrapeOra

A developer or an ops team needs product data from a supplier's website inside their own app, sheet or storefront, kept current. The four ways people do it, what each one costs to keep alive, and the one that does not need babysitting.

Somewhere in your company there is a spreadsheet, an internal tool, or a storefront that needs to know what a supplier is selling right now: the title, the price, the stock, the variants. The supplier publishes all of it on their website. They do not publish it anywhere you can use.

So someone on your team is going to get it from the website into your system. This piece is about the four ways that actually happens, what each one costs after the first week, and the one approach that does not turn into a maintenance job.

The problem is not getting the data. It is keeping it.

Getting a supplier's product data once is easy. You can do it by hand in an afternoon. The hard part, and the part every option below is really about, is that the data changes. Prices move, stock moves, variants come and go. A system that is correct on Monday is wrong by Friday unless something keeps it current.

So the question to ask of every approach is not "can it get the data?" but "who re-runs it, and what happens when the supplier's page changes?"

Option 1: Someone types it in

Honest, cheap to start, and the way most small teams begin. A person opens the supplier's page and your sheet side by side and transfers the fields.

What it costs: a person's time, every time. For a few products it is fine. For a few hundred it is a job, and it is the first job dropped when the week gets busy, which means the data goes stale exactly when nobody has time to notice.

Option 2: Ask the supplier for a feed

Some suppliers offer an export or an API, and if yours does, use it. CJdropshipping, Printful and Printify, for instance, have official APIs; a product read through one is exactly what the supplier intends you to have.

What it costs: it depends entirely on the supplier. Many offer nothing. Some offer a spreadsheet you download by hand, which is Option 1 with extra steps. Some offer an API with its own authentication, rate limits and shape, which means your developer now maintains an integration per supplier, and a change on their side breaks yours.

Option 3: A developer writes an importer

The classic answer. A developer writes a program that reads the supplier's product pages and writes the fields into your database. It works on day one and it is usually the best thing in the building for about a month.

What it costs is where this gets expensive, and it is worth being specific:

  • The page changes. Suppliers redesign, rename a CSS class, move the price into a different element. The importer silently reads nothing, or reads the wrong thing. You find out when someone notices the data stopped updating, which can be weeks.
  • Pages render differently than they look. Most modern product pages build their content in the browser after loading. An importer that reads the raw page sees an empty shell. Now it needs a real browser, which is slower, heavier and a different class of program.
  • The schedule is a second program. Something has to run the importer every day, retry it when it fails, and tell someone when it keeps failing. That is a scheduler, a queue and alerting, none of which were in the original estimate.
  • Duplicates. Run it twice and you have every product twice unless the importer matches each product to the one it already wrote. That matching logic is where most importers quietly go wrong.
  • Nobody owns it. The developer who wrote it moves on. The importer becomes the thing in the repo nobody wants to touch, until it breaks and everyone has to.

The honest total cost of a hand-written importer is not the week it took to write. It is the week to write it plus a few hours every month, forever, plus the outages nobody measures.

Option 4: Import the products once into a tool, and read them back out as an API

This is the approach that separates the two problems: reading the supplier is one job, serving the data to your system is another, and neither one is yours to keep alive.

It works like this. You paste the supplier's product or catalog links into a product-import tool. It reads each product fully, including the parts a browser renders, and stores them in a library with their variants, price and stock. It re-reads them on a schedule you choose, matching each product to the one it already has so nothing duplicates. And it publishes the library as a JSON feed at a stable URL that your own system reads with a plain GET.

What that changes:

  • You do not maintain an importer. The tool's job is to read product pages correctly and keep doing so when they change. That is its whole product. When a supplier's page changes, fixing it is the tool's problem, not a ticket in your backlog.
  • You do not maintain a scheduler. The re-read runs on the interval you set. If it fails, the tool says so.
  • Your side is trivial. Reading JSON from a URL is a few lines in any language, a built-in in most no-code tools, and a single function in a spreadsheet. The complexity moved to the side that was built for it.
  • The URL does not change when the data does. Your system points at one address. The data behind it updates. There is nothing to redeploy.

The shape of the data matters too. A good feed gives you, per product: the title and description, images, every variant with its SKU, the supplier's price, stock, the address of the supplier's own listing so you can get back to it, and timestamps — when the product first appeared, when it last changed. If you are reselling, it should also carry your selling price with your markup already applied, so your storefront does not have to do the arithmetic.

Public or private?

One decision comes up as soon as the data is at a URL: who should be able to read it?

A public feed is an open address. That sounds alarming until you look at the address: it carries a long, unguessable segment that belongs to your account, so it is reachable by anyone who has the link and nobody who does not. For a catalog that is already public on the supplier's site, this is usually fine, and it means a browser app can read it directly with no server in between.

A private feed is the same feed behind a key. You send the key with each request, and without it the address answers as if it did not exist. Use this when the data includes your own pricing, or when the feed is the input to something internal.

The right tool offers both and lets you switch a feed between them without changing its address.

Doing this with ScrapeOra

ScrapeOra's product data API is Option 4. Paste supplier links, or connect a supplier with an official API; the products land in your library. Open Developers, publish a feed, choose which suppliers it covers and whether out-of-stock products are included, and you get a URL under your account's own key. Call it with a GET and you get JSON: every product with its variants, images, the supplier's price, your price with your pricing rules applied, stock, the supplier listing's address, and when it first appeared and last changed. Add the supplier links to the feed's source list and an interval, and the products are re-read on that schedule.

Public feeds are on every plan, the free one included, which gives you a real URL and real JSON to wire your system against before you pay anything. Growth and Agency can put a feed behind a key. Responses carry an ETag, so a poller that asks often is cheap, and prices are worked out per request, so a markup change is live on the next call.

The short version

Getting supplier product data once is an afternoon. Keeping it current is the actual job, and every approach is really a decision about who does that job. Typing it in means a person does it until they stop. A hand-written importer means your developer does it, forever, mostly at the worst time. Importing into a tool that re-reads on a schedule and serves the library as a JSON feed means nobody on your team does it, and your system reads one URL that stays put while the data behind it moves.

Keep reading