Skip to content
DescriptorAPI

Payments, decoded

Merchant category codes, and why they are not categories

Every card payment carries a four-digit MCC. What it is for, where it goes wrong, and why a budgeting app cannot sort spending by it alone.

Written for: Product teams 3 min read Updated

Every card payment carries a four-digit merchant category code, or MCC. It is tempting to treat it as a ready-made spending category: 5411 is groceries, 5812 is restaurants, done. Teams that build budgeting features on MCCs alone usually find out within a month why that does not hold. Here is what MCCs are for, and where they go wrong.

What an MCC is

MCCs are defined in the ISO 18245 standard and used by the card networks, which publish their own lists and rules on top. The code describes the type of business a merchant does, as declared when it signed up to accept cards. It exists for the payment system's needs, not yours: interchange rates (what a merchant pays per transaction), risk rules, tax reporting in some countries, and card controls such as "no gambling" or "travel rewards".

MCCMeaningA spending category would say
5411Grocery stores, supermarketsGroceries, usually. Also the pharmacy and electronics counters inside a hypermarket.
5812Eating places, restaurantsRestaurants.
5814Fast food restaurantsRestaurants, or "takeaway", depending on the app.
5541, 5542Service stations, automated fuel dispensersFuel, though the station shop sells snacks and car washes too.
4121Taxicabs and limousinesTransport: ride hailing and taxis.
4784Tolls and bridge feesTransport: road tolls.
5999Miscellaneous and specialty retailAnything at all.
7399Business services, not elsewhere classifiedAnything at all, often online.

Where MCCs break down

The catch-all codes

A large share of payments, especially online and through facilitators, carry catch-all codes such as 5999 and 7399. These say "some kind of shop" or "some kind of service" and nothing more. If your category model relies on the MCC, those payments all land in "Other", and "Other" becomes your biggest category.

One company, one code

An MCC is set per merchant account, not per purchase. A supermarket that also sells phones, a fuel station with a café, an airline that sells hotel packages: each purchase gets the account's code, whatever you bought. A delivery platform carries a single code for groceries, restaurant meals and pharmacy orders alike.

Facilitators choose for the merchant

When a small business signs up through a payment facilitator, the facilitator assigns its code, often from a short list, and it is not always precise. Two very different shops on the same facilitator can carry similar codes.

Codes are about payments, not people

MCCs do not distinguish a subscription from a one-off purchase, a gift card from a meal, or a refund from a sale. They also say nothing about the brand, which is what users actually recognise.

The same code, different spending

CARREFOUR MOE DUBAI AE MCC 5411

CARREFOUR
Carrefour: the weekly shop, or a television from the electronics aisle. The code is the same.
MCC 5411
Supermarket, for every purchase at this account.
An illustrative line with its category code. Most statements do not print the MCC; banks and apps receive it in the transaction data.

What works better

Use the MCC as one signal among several, not as the answer:

  • Identify the merchant first. A recognised brand carries much more information than a four-digit code: what it sells, whether it is a subscription, what users call it.
  • Categorise by what the merchant sells at the point of sale. A fuel brand is fuel, even if the parent company is an energy group; a supermarket inside a mall is groceries, not shopping.
  • Keep the MCC as a tie-breaker when the name is ambiguous, for example a short name that belongs to both a restaurant and a clothing shop.
  • Let users correct categories and remember their choice; no model gets personal categories right for everyone.

Field note

When a caller sends us an MCC with a descriptor, we use it as a hint, never as the answer. It is most useful exactly where the text is weakest: short names, cut-off names and names shared by unrelated businesses in different countries.

Categories from DescriptorAPI

Each merchant we return carries a category and subcategory from a fixed list designed for spending, not for interchange, plus an MCC where we are confident of it. Send the transaction's own MCC in the request if you have it; it improves results for ambiguous lines. See the quickstart for the request format.

Read next