Introducing shopgen: months of order history for a Shopify test store
An empty Shopify development store makes every weekly report look flat. shopgen fills one with 90 days of realistic orders, and it's free and open source.
A weekly report needs weeks behind it. Point one at an empty Shopify development store and every section reads the same: no trend, no best seller, nothing to act on. Orders you add by hand don’t fix it. They all land today, they have no history, and none of them get refunded.
So we built shopgen, and today we’re releasing it as free, open-source software under the MIT license.
What it does
shopgen fills a Shopify development store with months of order history that looks like a real store’s. It creates each order through the Shopify Admin API, dated on its historical day, so it lands on the right day in Shopify analytics, not today.
You describe the store in a short JSON profile: how many orders a day, how fast it grows, which days spike. shopgen works out the rest.
From the example profile: 60 orders a day, 25% growth over the window, and a spike on Labor Day.
What the history looks like
- Shape. Volume grows over the window, follows a weekly cycle, peaks in the evening, and jumps on the dates you mark as spikes.
- Best sellers. A few products sell far more than the rest, as in a real catalog.
- Repeat buyers. Customers come back, so repeat-purchase numbers mean something.
- Seven outcomes. Most orders are paid and fulfilled. A few are refunded in full or in part, cancelled, left unpaid or still waiting to ship. Recent orders are more likely to be unfulfilled.
- Tax and shipping. Orders include tax, and shipping is free over the threshold you set.
| Outcome | Share of orders |
|---|---|
| Fulfilled | 82% |
| Unfulfilled | 4% |
| Refunded | 4% |
| Partly refunded | 4% |
| Partly fulfilled | 2% |
| Awaiting payment | 2% |
| Cancelled | 2% |
Same profile, same orders
Give shopgen the same profile and the same catalog, and it makes the same orders every time. A report that looked wrong last week can be checked against exactly the same history this week.
Built to run overnight
Shopify lets development stores take five new orders a minute, so 90 days of history takes about 19 hours. shopgen tells you how long before it starts. You can stop it, or it can crash, and it picks up where it left off with no gaps and no duplicates.
shopgen doctor # check login, store, products
shopgen plan # preview every order
shopgen run --limit 3 # make three and check them in Shopify
shopgen run # make the rest overnight
shopgen purge --run <id> # delete what that run made
doctor and plan change nothing in your store, so you can run them as often as you like.
purge only deletes what shopgen tagged, and asks you to type delete first.What it doesn’t do yet
- Refunds show up in sales totals but not in reports on returned items.
- Every order uses today’s prices, and there are no discount codes.
- Addresses are in the US only.
Try it
shopgen works with Shopify only. You need a development store with a few active products, and an app with the read_products, write_orders and write_customers scopes. The setup guide walks through it.
Then, with Go 1.24 or later:
go install github.com/weekwright/shopgen@latest
shopgen plan
plan works without a store, using a built-in catalog of 40 products, so you can design a profile before you connect anything.
The code, setup guide and example profiles are on GitHub, and the full docs are at weekwright.github.io/shopgen. Issues and pull requests are welcome.
Run shopgen plan with the example profile and see what 90 days of your Shopify test store could look like.