Glossary

Stripe Product

A Stripe Product is the catalog object, with an ID beginning prod_, that describes what you sell: its name, description, tax code and active status, while the amount, currency and interval live on the Prices attached to it.

Also called: Stripe Product object, prod_ ID, Stripe product catalog, default_price, archived product

Definition

Stripe splits one idea that most invoicing tools keep together. The thing you sell is a Product. What it costs, in which currency and how often, is a Price. A Product can have many Prices, and every Price belongs to exactly one Product, which Stripe records on the Price as the ID of "the product this price is associated with".

The split decides what lives where. The Product holds the customer-facing identity of the offer: a required name, an optional description and images, a tax code for Stripe Tax, a unit label, and an active flag. It holds no amount. Even its default_price is only a pointer, the ID of the Price Stripe should reach for first.

Stripe gives a one-line test for where the boundary sits: "If two options appear as different rows on your pricing page, they must be different products. If they’re the same row billed at a different interval (monthly versus annual), they’re different prices on one product."

That test matters to a bookkeeper more than it first appears to. Checkout, Payment Links and invoices display the Product name on each line. When a business puts its Starter and Pro tiers on one Product as two Prices, every line reads the same name and only the amount differs, and anyone reading the invoices later has to work backwards from the amount to the plan.

Key points

  • +A Product describes what you sell. Its Prices hold the amount, currency, interval and tax behavior.
  • +One Product can have many Prices, and each Price belongs to exactly one Product.
  • +Invoice lines reference the Product by ID. The name you see today is the Product’s current name, which can be edited.
  • +Setting active to false archives a Product. Stripe keeps archived products and prices indefinitely for past transactions.
  • +A Product that has a Price attached cannot be deleted. It can only be archived.
  • +statement_descriptor on a Product is only used for subscription payments, and only the first one is used when several products are billed together.

The fields on a Product, and which ones reach your books

The Product object is short. Beyond its ID and timestamps, Stripe documents a name "meant to be displayable to the customer", a description for "a long form explanation of the product being sold", up to 8 images, up to 15 marketing features for pricing tables, metadata, a URL, and shipping fields (shippable and package_dimensions) for physical goods.

Four fields do most of the accounting work.

tax_code is the tax category ID for Stripe Tax. Stripe says Stripe Tax uses the tax code to calculate and collect sales tax during purchase, so it is the Product, not the Price, that decides whether an item is taxed as SaaS, an e-book or pet grooming, to use Stripe’s own examples.

unit_label is "a label that represents units of this product", up to 12 characters. When set, it is printed on receipts, invoices, Checkout and the customer portal, which is where a line reading 40 seats rather than 40 comes from.

statement_descriptor is narrower than its name suggests. Stripe says it is "only used for subscription payments", and that when several products are billed at once, "the first statement descriptor will be used". A one-off charge never reads it.

active is "whether the product is currently available for purchase". It is the archive switch, and it controls new sales only.

Product or Price: one test, and what it does to your invoices

Stripe’s catalog guidance gives four reasons to create a new Product rather than another Price: a distinct name on your pricing page, different features or entitlements, a different tax code, or a need to appear as a separate line item. It gives three reasons to add a Price to an existing Product instead: the same plan at a different billing interval, the same plan in a different currency, and a price change.

Its worked example is a SaaS business with Starter, Professional and Enterprise plans, each sold monthly and annually. The right model is three Products with two Prices each, not one Product with six Prices.

The reason is on the documents. Stripe warns: "Don’t attach prices for different tiers to a single product. Line items that share a product share its name and description on receipts and invoices. This means only the amount differs."

For anyone who has to report revenue by plan, the one-Product model is the expensive one. Every line says the same thing, so separating Starter revenue from Pro revenue means grouping by price ID or by amount. Amount breaks as soon as a discount or a price change lands. A Product per plan makes the plan visible on every line without any lookup at all.

What an invoice line keeps, and what it only points to

When you invoice with Prices, Stripe says the invoice "retrieves the product associated with the price and uses product.name when rendering the invoice as a web page or PDF". Checkout and Payment Links do the same: they compute the total from the Price and render the page from the Product’s name and image.

The invoice line item object records the result, not a copy of the catalog. Its pricing details carry two IDs, the price and the product, alongside the amount, currency, quantity and a description field Stripe describes as "an arbitrary string attached to the object".

That shape has a consequence people meet when they reconcile old periods. A Product’s name can be edited at any time through the update endpoint. If you look up the product ID from a two-year-old line today, you get today’s name, not the one the customer saw. The ID is the stable key. The name is a label that can move.

So when a revenue report has to be reproduced exactly, group by product ID and treat the name as a display value. A renamed plan and a new plan look identical in a name-based report and completely different in an ID-based one.

Archived is not deleted

Stripe keeps catalog history on purpose. Its guidance is direct: "In general, you can’t delete products or prices, you can only archive them." Archiving means setting active to false, and Stripe says it stores "the archived product and price information indefinitely to maintain records of past transactions."

The delete endpoint enforces the same rule. Deleting a Product "is only possible if it has no prices associated with it". Since the Dashboard requires at least one Price to save a Product, almost every Product you have ever sold through the Dashboard is archive-only.

Archiving changes what can happen next, not what already happened. Stripe says an archived Product cannot be added to new invoices or subscriptions, that existing subscriptions using it "remain active until they’re canceled", and that existing Payment Links using it are deactivated.

The practical reading for your books: a subscription can keep billing a Product that no longer appears in your active catalog. If a charge arrives for a plan you thought was retired, check the Archived tab before assuming it is an error.

Products you never created in the Dashboard

Not every Product on your account came from someone clicking Add product.

When an integration passes price_data to create a Checkout Session, Payment Link or Subscription, Stripe generates Price and Product objects for that transaction. Stripe notes that these Price objects are temporary and do not appear in the Dashboard’s product searches or lists, and that "the associated Product objects aren’t always temporary." Stripe also supports inline prices on subscriptions and invoices, created only through the API, for businesses that manage their catalog outside Stripe.

The symptom is a product ID on an invoice or charge that you cannot find by browsing your catalog. It is not missing data. It is a Product created by code, and it can still be opened directly by its ID.

An integration that creates Products this way can leave many more product IDs on an account than anyone created by hand. Each one is a separate ID to anything that groups revenue by product, so it is worth knowing which of your integrations do it.

How Acodei uses the Product ID

Acodei can route revenue by Stripe Product as one of the matching methods in Multiple Product Mapping. Mapping rules are evaluated from top to bottom, and the first rule that matches decides the QuickBooks Product/Service the line is recorded against, which in turn carries the income account.

There are two Stripe Product rule types. With pricing tier, the rule uses both the Product ID and the Price ID, so one Product sold monthly and annually can land on two different QuickBooks items. Without pricing tier, every charge and invoice for that Product routes to the same QuickBooks item, whichever Price was used.

Two details follow from matching on IDs rather than names. Renaming a Product in Stripe does not break a Product ID rule. And if a Price is archived in Stripe, a mapping built on it stays in place, so Acodei’s documentation recommends removing or updating stale mappings when you retire prices. Changes to mapping rules apply to future transactions only.

The Product’s description can also be read, by the description-matching method rather than the ID one. For a charge tied to a Stripe Checkout session, the description checked is the Product description first, then the Checkout line item description.

For the full set of matching methods, see mapping rules keyed on a Stripe Product ID.

Want to see this on your own Stripe data?

Start a free trial

Frequently asked questions

What is a Stripe Product object?

It is the catalog record, with an ID beginning prod_, for something you sell. It holds the name, description, images, tax code, unit label and whether the product is active. It holds no amount. Amounts, currencies and billing intervals live on the Prices attached to it, and one Product can have many Prices.

Should monthly and annual billing be separate Stripe Products?

No. Stripe’s guidance is that the same plan at a different billing interval is a different Price on one Product. Separate plans that appear as separate rows on your pricing page, such as Starter and Pro, should be separate Products. Otherwise every invoice line shares one name and only the amount tells the plans apart.

Can I delete a Stripe Product?

Only if it has no Prices attached. Stripe says that in general you can archive products and prices but not delete them, and it keeps archived records indefinitely for past transactions. Archiving sets active to false, which stops new invoices and subscriptions using the Product without changing existing ones.

Why does an old Stripe invoice show a different product name than I remember?

Because invoice lines point at the Product by ID, and a Product’s name can be edited. Looking the ID up today returns the current name. For historical reporting, group revenue by product ID rather than by name, since a renamed product and a new product are indistinguishable by name alone.

Why is there a product ID on a charge that I cannot find in my Stripe catalog?

It was probably created by an integration. When price_data is used to create a Checkout Session, Payment Link or Subscription, Stripe generates the Price and Product for that transaction. Those Prices do not appear in Dashboard lists, and Stripe notes the Products are not always temporary. You can still open the object by its ID.

What customers say about running Stripe through Acodei

Stripe Verified Partner BadgeQuickBooks Intuit Badge
If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.
RyanOwner at Indie Music Academy
Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.
AndresCo-founder and CEO at Kanguro Collections and Reinsurance

Related reading

More glossary terms

See the full glossary

Ready to try Acodei?

Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.