The shops this is actually about
Start with who this is for, because “boutique” covers everything from a two-rail shop on the Avenue in Hampden to an independent store with three floors and a buyer. I pulled the Census Bureau’s County Business Patterns file for 2023 and its Nonemployer Statistics for the same year, both downloaded this week, and counted clothing stores in Baltimore City, the counties around it, and Maryland as a whole.
| Jurisdiction | Employer stores | Employees | Annual payroll | Payroll per employee | Under 10 staff | Sellers without staff | Mean receipts |
|---|---|---|---|---|---|---|---|
| Baltimore City | 107 | 1,134 | $22,462,000 | $19,808 | 70.1% | 471 | $19,231 |
| Baltimore County | 227 | 3,784 | $76,518,000 | $20,221 | 52.4% | 743 | $26,563 |
| Montgomery | 247 | 4,674 | $115,086,000 | $24,623 | 49.4% | 732 | $39,100 |
| Prince George’s | 188 | 3,618 | $73,515,000 | $20,319 | 48.4% | 942 | $24,030 |
| Anne Arundel | 198 | 3,025 | $61,639,000 | $20,377 | 42.4% | 423 | $36,043 |
| Howard | 81 | 1,554 | $34,500,000 | $22,201 | 44.4% | 265 | $31,098 |
| All Maryland | 1,405 | 22,689 | $479,886,000 | $21,151 | 52.4% | 4,895 | $27,736 |
Two things stand out. The first is how small the city’s shops are. Of Baltimore City’s 107 clothing stores with any payroll, 75 — 70.1% — employ fewer than ten people, the highest share of any large jurisdiction in the state. Statewide the figure is 52.4%, and in Anne Arundel County it is 42.4%. The city’s clothing stores employ 1,134 people and pay them $22,462,000 a year, which works out to $19,808 of payroll per employee. That is the figure for a trade built on part-time floor staff, and it is not a salary.
The second is the part County Business Patterns cannot see, because it counts only establishments with employees. The Nonemployer Statistics count everyone else: businesses, mostly sole proprietors, that report receipts to the IRS but have no payroll. For Baltimore City they find 471 clothing and accessories sellers with no employees at all, taking in $9,058,000 between them, or a mean of $19,231 each. Put the two files side by side and 81.5% of the city’s clothing businesses have no staff. The national distribution is starker than any mean. Of 241,235 nonemployer clothing sellers in the United States in 2023, 49.5% took in less than $10,000 and only 3.0% took in more than $250,000.
A note on method, because the two files do not quite line up. County Business Patterns for 2023 is still published on the 2017 industry codes, where clothing stores are NAICS 4481, while the nonemployer file uses the 2022 codes, where the same trade became 45811, “clothing and clothing accessories retailers.” The scope matches, since the six older subcodes, accessories stores included, were folded into the one new code. I have still kept the two counts in separate columns rather than adding them together.
What this means for software is simple and a little uncomfortable. Most people who find this article are one person, or one person and a part-timer, selling from a small shop, a market table, a live stream or a website. The tools sold to them are priced for that: cheap, charged per location, and generic. This article is for the few hundred shops that have outgrown that stage. They have a few staff, a real online store, a returns problem and a sale rack, and that is where the gaps below start to cost money.
What the tools get right
Before I pick at the tools, some credit, because they are good at the thing a boutique needs first. Shopify, Square and Lightspeed all take money in person and online against one inventory count, and they do it for less per month than a single day of a part-timer’s wages. Shopify’s point of sale and online store share one catalog, so the last medium in sage green does not sell twice. Square publishes its whole U.S. rate card, which almost nobody else in this market does. Lightspeed’s retail product handles matrix inventory, meaning style, color and size as a grid rather than a list, which is how clothing is actually bought and counted.
If you run on any of these and nothing below describes a problem you have, keep them. We would say the same on a call. The rest of this article covers what none of them was built to know, and the answer is not that they are bad software. They are sold across the whole country and well beyond it, so they model what is common to everyone. The rules below belong to one federal agency, one state and one city, and they happen to sit exactly where a boutique makes its money: the product page, the price, the return and the checkout.
What the platforms charge, and what the meter is counting
To price the stack honestly I need a shop to price it for, so here is a modeled boutique. It has one location, $700,000 a year in card sales, 30% of it online, an $88 average ticket, and 22% of online orders coming back as returns. These are round, stated assumptions, not a Baltimore average, because nobody publishes one. They produce 5,568 in-store tickets, 2,386 online orders and 525 online returns a year, which is enough to run every vendor’s meter against.
The biggest line is the one nobody thinks of as software. I used Square’s published U.S. card rates because they are public in full, and whichever processor you use, the order of magnitude will be the same. On the Plus plan, at $49 a month per location, with 2.5% + 15¢ per in-person payment and 2.9% + 30¢ per online one, the modeled shop pays $19,891 in processing plus $588 in subscription. That comes to $20,479, or 2.93% of everything it sells. The free plan would cost it $21,221 and Premium $21,189, so Plus is the cheapest of the three at this size, and at this mix of in-store and online sales it pays for itself against the free plan once card volume passes roughly $309,000 a year. The fixed cents are worth noticing. The 15¢ on every tap and 30¢ on every online order add up to $1,551 a year, which is more than the Shopify plan and the point-of-sale license in the lean stack below put together.
Then comes the software layer, which is a stack of small subscriptions, each one metering a different noun. Here are two versions of it at published prices: a lean one and a comfortable one.
| Job | What the meter counts | Lean stack | Per year | Comfortable stack | Per year |
|---|---|---|---|---|---|
| Online store | Plan tier | Shopify Basic, annual billing ($29/mo) | $348.00 | Shopify Grow, monthly billing ($105/mo) | $1,260.00 |
| Point of sale | Locations | Shopify POS Pro ($89/location/mo) | $1,068.00 | Shopify POS Pro ($89/location/mo) | $1,068.00 |
| Returns portal | Returns | AfterShip Essentials ($192/yr, 20 returns/mo included, $0.50 each after) | $334.50 | Loop Essential (“starting at $155/mo”) | $1,860.00 |
| Size charts | Orders per billing cycle | Kiwi Sizing Plus, 100–500 order band ($19.99/mo) | $239.88 | Kiwi Sizing Ultimate, same band ($36.99/mo) | $443.88 |
| Loyalty | Monthly orders | Smile.io Essential ($15/mo) | $180.00 | Smile.io Standard ($79/mo) | $948.00 |
| Contacts (“profiles”) | Klaviyo, 2,500 profiles ($60/mo) | $720.00 | Klaviyo, 5,000 profiles ($100/mo) | $1,200.00 | |
| Total | $2,890.38 | $6,779.88 | |||
Two things in that table are worth a second look. The first is returns. At the modeled volume, AfterShip’s Essentials plan comes to about 64 cents a return, while Loop’s entry plan comes to $3.54. There is also a third model, sold as free. Redo charges the merchant nothing and charges the shopper instead: its own help-center template tells the customer, “If you purchase Redo for $1.98 with your order,” returns are covered. If every one of the modeled shop’s 2,386 online orders bought that coverage, its customers would pay $4,724 a year for a returns program the shop describes as free. The meter has not disappeared; it has moved onto your customer.
The second is that none of those meters counts anything the law cares about. They count locations, returns, orders and contacts. None of them counts, or even stores, the date a price was set, the country a garment was sewn in, the day a credit slip was issued, or the number of paper bags that left the shop in March. Those are the kinds of facts this article is about.
Live selling needs its own paragraph, because for many boutiques it has become a real sales channel, and its meter is a percentage. CommentSold, one of the best-known platforms for selling through Facebook and Instagram live shows, publishes four plans: Starter at $149 a month plus 6% of sales, Starter with AI at $249 plus 6%, Small Business at $499 plus 5%, and Large Business at $999 plus 4%, with its own payments at 2.9% + 30¢. Suppose $120,000 of a year’s sales happen in live shows at the same $88 ticket.
| Plan | Subscription/year | Sales fee | Platform total | As % of live sales | With payments | As % of live sales |
|---|---|---|---|---|---|---|
| Starter ($149/mo + 6%) | $1,788 | $7,200 | $8,988 | 7.49% | $12,877.20 | 10.73% |
| Starter with AI ($249/mo + 6%) | $2,988 | $7,200 | $10,188 | 8.49% | $14,077.20 | 11.73% |
| Small Business ($499/mo + 5%) | $5,988 | $6,000 | $11,988 | 9.99% | $15,877.20 | 13.23% |
| Large Business ($999/mo + 4%) | $11,988 | $4,800 | $16,788 | 13.99% | $20,677.20 | 17.23% |
The percentage falls as the plan rises, which makes the bigger plans look like volume discounts, and they are, but only at volumes almost no boutique reaches. Small Business overtakes Starter only above $420,000 a year of live sales, and Large Business overtakes Small Business only above $600,000. For the modeled shop, the cheapest plan is also the right one, and the platform still takes about one dollar in every thirteen sold on camera before the card fee. TikTok Shop, for comparison, publishes a 6% commission on each sale. I am not telling anyone to leave these platforms; audience is the product they sell, and a website cannot sell you one. My point is that the live channel is the one place in a boutique’s stack where the meter is big enough to be worth arguing about.
The part no national platform models
Here is what the subscriptions do not cover, and none of it is exotic. It consists of two federal statutes and their rules, one federal pricing guide, a state consumer statute, a state gift-certificate statute, a state tax regulation and a city ordinance. Every one of them lands on a record that a boutique’s software either keeps or does not: the product page, the price, the credit balance, the line item and the bag. I will start with the product page, because that is where a customer meets them first.
Your product page is a label, and has been since 1998
The Textile Fiber Products Identification Act was signed on 2 September 1958, and most of it describes the sewn-in label every boutique owner has seen a thousand times. Under 15 U.S.C. §70b(b), a covered garment carries the generic names of its fibers in order of predominance by weight, with percentages; the name or FTC-registered identification number (the “RN”) of a business responsible for it; and the country where it was processed or manufactured. That part arrives in the neck of every garment, and nobody has to think about it. The part almost nobody knows is subsection (i):
For the purposes of this subchapter, a textile fiber product shall be considered to be falsely or deceptively advertised in any mail order catalog or mail order promotional material which is used in the direct sale or direct offering for sale of such textile fiber product, unless such textile fiber product description states in a clear and conspicuous manner that such textile fiber product is processed or manufactured in the United States of America, or imported, or both.
Congress added that sentence in 1984, and not in a textile bill. It is section 303 of Public Law 98–417, the Drug Price Competition and Patent Term Restoration Act, better known as the Hatch–Waxman Act, which created the modern generic-drug industry. Title III of that act, about two pages long, amended the textile and wool labeling acts and took effect ninety days after the act was signed on 24 September 1984. The rule that tells a clothing shop what its catalog must say about origin was passed inside the generic-drug law.
Then, on 13 February 1998, the Federal Trade Commission rewrote its definition of “mail order catalog” and “mail order promotional material” to cover materials “disseminated to ultimate consumers in print or by electronic means” that ask a buyer to purchase “without examining the actual product purchased” (16 CFR 303.1(u)). In the Federal Register notice it said, in as many words, that “the statutory requirement that country of origin be disclosed in catalogs also applies to catalogs appearing on the Internet.” A product page is a mail order catalog, and it has been for twenty-eight years.
What the page has to say is narrow and specific. The FTC’s own business guide, Threading Your Way Through the Labeling Requirements, gives the forms. “Made in U.S.A.” is only for a garment made here of fabric made here. “Made in U.S.A. and imported” covers a garment sewn here from imported fabric, or partly processed abroad. “Made in U.S.A. or imported” is for a product whose units come from both. An imported garment’s description says “imported.” The last sentence of §303.34 is the one that catches local shops: the statement “shall not be inconsistent with the origin labeling of the product being advertised.” The page has to agree with the neck label.
That brings me to the most common origin phrase in the sample below, which was “Made in Baltimore.” It appeared 45 times, about a third of all the origin statements we found. It is a lovely thing to be able to say, and it is fine when it is true all the way down. Now picture a tee screen-printed in Remington on a blank that was sewn in Honduras. It arrives with “Made in Honduras” in the neck, and a product page that calls it “Made in Baltimore” now disagrees with its own label. The Act also makes it unlawful to cut that label out before the garment reaches the consumer (§70c(a)). A shop that wants its own label in the neck may substitute one, but the substitute must carry the same required information plus the shop’s own name or RN (§70c(b)). The shop must also keep, for three years, records of what it removed and whom it bought the garment from (§70d(b)). A private-label program is therefore a record-keeping program, whether or not anyone set it up as one.
Violations are unfair or deceptive acts under the FTC Act (§70a), and a willful violation is a misdemeanor carrying up to $5,000 and a year (§70i). The expensive route is civil penalties, and the current maximum is $53,088 per violation. That figure is from 16 CFR 1.98, unchanged for 2026 after the Office of Management and Budget canceled this year’s inflation adjustment. Nobody is going to fine a Hampden boutique that much per product page next week, and I will not pretend otherwise. But the Commission has used this route against textile advertising before, and the case is instructive. I come back to it in the section on fiber below.
Where would a boutique even keep the fact? Shopify has a “Country/Region of origin” field, and it sits in the product’s Shipping section next to the HS tariff code, filed as customs information. It exists so Shopify can estimate duties and fill in customs forms on international orders. Shopify’s documentation for the Liquid variant object, which is what a theme uses to draw a product page, lists price, compare-at price, SKU, barcode, weight, inventory, metafields and much else, but no country of origin. So the one field in the platform that holds the fact the law wants on the page is filed as a shipping detail, and getting it onto the page means copying it by hand into a metafield or into the description itself.
What eleven Baltimore boutiques’ product pages actually say
I wanted to know how often that fact reaches the page in practice, so on 18 September 2026 we downloaded the public product feeds of eleven Baltimore clothing boutiques and apparel shops whose online stores run on Shopify. Shopify stores expose this feed by default, and it lists each product with its description, variants, prices and compare-at prices. We read the description of every one of the 3,149 products, and a keyword filter classed 1,959 of them as garments. Three of the eleven catalogs were cut short by rate limiting, so treat what follows as a sample and not a census.
| What we looked for in the description | All products (3,149) | Garments (1,959) |
|---|---|---|
| Any statement of origin (“made in …”, “imported”) | 138 (4.4%) | 61 (3.1%) |
| Fiber content with percentages | 560 (17.8%) | 458 (23.4%) |
| Fibers named, no percentages | 640 (20.3%) | 405 (20.7%) |
| No fiber named at all | 1,951 (62.0%) | 1,098 (56.0%) |
| Variants with a compare-at price above the selling price | 1,242 of 11,277 (11.0%) | 1,119 of 8,769 (12.8%) |
| Median markdown on those variants | 30.0% | 28.6% |
Three caveats keep this honest. First, the origin may appear somewhere our reading could not see, such as a photo of the label, a size-chart tab or a site-wide footer, although the rule puts it in the product description itself. Second, not every product is covered: shoes, hats and handbags are exempt from the Textile Act, which is why the garments column matters more than the total. Third, a keyword filter is not a lawyer. What the numbers do say plainly is that in this sample, the one fact federal law wants on every garment page is missing from about 97 of every 100. Of the 138 origin statements we did find, 16 said “Made in USA” or an equivalent and 10 said “imported.” I am not naming the shops. They are doing what their platform makes easy, and so is nearly everyone else. A national chain’s feed would probably look different, because a chain’s catalog usually comes from a product-information system with origin as a required column, while a boutique’s is typed into a text box.
Name one fiber and you owe the reader all of them
Fiber content online works by a trigger. Under §70b(c), if a written advertisement makes “any disclosure or implication of fiber content,” it must carry the same fiber information the label does: every fiber present at 5% or more, by its generic name, in order of predominance, “except that the percentages of the fiber … need not be stated.” So “linen shirt” is a fiber disclosure. If the shirt is 55% linen and 45% cotton, the page owes the reader “linen, cotton,” and it may leave out the numbers.
The FTC’s rules add three details that a text box handles badly. A fiber under 5% is listed as “other fiber” unless it has a clear functional purpose, and the rule’s own example is “96 percent Acetate, 4 percent Spandex” (16 CFR 303.3). An advertisement that uses a generic fiber name or a fiber trademark must make the full disclosure at least once (303.41(a)). And a hang tag that names one fiber on a garment containing others must say so, with wording like “See label for the product’s full fiber content” (303.17(b)). In the sample, 56.0% of garment listings named no fiber at all. That is lawful if nothing else on the page implies one, and it is also the listing least likely to answer the question a customer asks before buying a sweater online. Another 20.7% named fibers without percentages, which is exactly what the statute allows, as long as the list is complete.
The fiber rule has one famous trap. A soft fabric sold as “bamboo” is almost always rayon made from bamboo pulp, and in the law’s vocabulary it is rayon. The FTC’s guidance accepts “rayon made from bamboo.” In April 2022 the Commission announced civil penalties of $2.5 million against Kohl’s and $3 million against Walmart for marketing rayon textiles as bamboo, after it had warned 78 retailers about exactly that in 2010. In our sample, ten products used the word “bamboo,” and none of them used “rayon,” “viscose” or “lyocell” anywhere in the title, description or tags. Some of those ten may be bamboo accessories rather than fabric, and your software cannot tell which unless fiber is a field and not a sentence.
The compare-at field has no memory
Every storefront platform has a field for the crossed-out price. Shopify calls it the compare-at price, and its help page says to “set the value of the Compare-at price field in your Shopify admin to the original price.” The field holds one number. It does not record when that number was set, how long the item was offered at it, or whether anyone ever paid it.
That matters because the crossed-out number is a claim about your own past. The FTC’s Guides Against Deceptive Pricing accept a former-price comparison only when the former price is “the actual, bona fide price at which the article was offered to the public on a regular basis for a reasonably substantial period of time.” A price is not fictitious merely because nobody bought at it, but it must have been “openly and actively offered for sale” in “the recent, regular course” of business (233.1(b)). The reduction must also be real: an item “Reduced to $9.99” from $10 misleads by being trivial (233.1(e)).
Maryland’s Consumer Protection Act says it in fewer words. The unfair or deceptive trade practices listed in Commercial Law §13–301 include a false or misleading representation of fact concerning:
(i) The reason for or the existence or amount of a price reduction; or (ii) A price in comparison to a price of a competitor or to one’s own price at a past or future time.
That statute anticipated both the “was” price and the “will be” price. A merchant who violates it faces civil penalties of up to $10,000 per violation and $25,000 per repeated violation (§13–410), and any consumer injured by one may sue for damages and ask the court for attorney’s fees (§13–408). What neither Washington nor Annapolis writes down is a number of days. The FTC says “reasonably substantial,” and Maryland says “misleading.” California, whose statute reaches advertising seen by Californians, does give a number: a former price has to have been the prevailing market price “within three months next immediately preceding” the advertisement, unless the date it prevailed is stated (Business and Professions Code §17501).
The European Union wrote a number down too, and Lithuania got there first. Article 6a of the EU’s Price Indication Directive, inserted by the 2019 Omnibus Directive and in force across the Union since 28 May 2022, requires every announced price reduction to show the prior price, defined as the lowest price the trader applied over a period of not less than 30 days before the reduction. The Lithuanian Seimas wrote that rule into Article 6.353 of the Civil Code by Law No. XIV–205. It passed on 23 March 2021 by 129 votes to none and took effect on 1 July 2021, nearly eleven months ahead of the EU deadline. The Seimas’s announcement spells out two details that matter to a clothing shop. When a price is cut in stages, the prior price is the price before the first cut, so the third markdown of the season still has to be measured against the original ticket. And for new stock: “Jeigu daiktas buvo siūlomas pirkėjams mažiau negu 30 dienų, taikomas faktinis daikto siūlymo pirkėjams terminas,” meaning that if an item has been on offer for less than 30 days, the actual period it was on offer is used instead. In September 2024 the EU Court of Justice extended the same logic to the percentage in the Aldi Süd case (C–330/23), holding that a “−23%” has to be computed from that 30-day low. Before Black Friday 2024, Lithuania’s consumer authority, VVTAT, put it to retailers in a single line: “Reklamoje sumažinta kaina turi būti lyginama su mažiausia kaina, taikyta per paskutines 30 dienų,” meaning that in advertising, the reduced price must be compared with the lowest price charged in the last 30 days.
Shopify’s answer to that European law is instructive for a Baltimore shop that never ships to Europe. Its help page on the Price Indication Directive tells merchants: “In the Compare-at price field, enter the product’s lowest price within the last 30 days or more.” It then adds: “You’re responsible for reviewing this information and applying it to your business.” The page says nothing about Shopify keeping a price history, and the instruction only makes sense if it does not. The platform’s answer to a legal duty to know your own price history is that you should know it.
In our Baltimore sample, 11.0% of variants carried a compare-at price above their selling price, with a median markdown of 30%. Of the 270 discounted products, 11 had first been published within the previous 30 days and 3 within the previous seven. That is not evidence of wrongdoing. A product can be re-listed, and a shop may have sold it at full price in the store before it went online. Under the Lithuanian rule above, though, those are exactly the items whose prior price would be measured over a period shorter than 30 days, which is why that rule had to say something about them. And that is my point: the store’s own data cannot tell you either way. It has a publish date and a crossed-out number, and nothing connecting them.
The fix is small. A price ledger records every price change with a timestamp and never overwrites a row. That turns “was $148” from an assertion into a query: what was the lowest price in the last 30 days, or the last 90, and when was $148 last charged, and for how long? With a ledger, a sale can refuse to publish a compare-at price that has not been the real price for a period you choose, and it can compute an EU-style prior price automatically for the day you start shipping to Vilnius or Dublin. It amounts to a table and a constraint, and it is also the thing no app in the stack above sells.
In Maryland, store credit is a gift certificate
Boutiques love store credit. It keeps the money in the shop, and “exchange or store credit only” is a common return policy in the trade. Posted clearly, it is an entirely reasonable one. What surprises owners is what the credit becomes once it is issued. Maryland’s gift certificate statute, Commercial Law §14–1319, defines a gift certificate as a device of “paper, plastic, or any other material” that is either sold for cash value or, in (a)(1)(ii), “Issued as a store credit for returned goods.” Then comes the operative sentence:
(b) A person may not sell or issue a gift certificate that, within 4 years after the date of purchase, is subject to expiration or a fee or charge of any kind.
So a credit slip printed “valid for 90 days” does not mean what it says. Subsection (e) says a certificate issued in violation “shall be considered valid and may not be subject to expiration or any fee or charge.” The printed expiry is not merely risky, because the statute simply overrides it. Any term that takes effect after the four years must be printed in at least 10-point type on the certificate, a sticker or its envelope (§14–1319(c)). A violation is an unfair or deceptive trade practice under the Consumer Protection Act, with its civil remedies but not its criminal ones (§14–1319(f)). The statute also excludes something important. A certificate handed out “under an awards, loyalty, or promotional program in which the recipient does not give money or value” is not a gift certificate at all (§14–1319(a)(2)(v)). So two $25 balances on the same customer’s account can be two different legal objects, depending on where they came from. (Network-branded gift cards are a separate section, §14–1320, which our salon and spa article covers.)
Now look at the platform. Shopify’s store credit help page says: “You can set expiration dates for store credit.” Expiry is chosen each time a credit is issued, and there is no store-wide default. The only legal guidance on the page is a single line: “Check local laws: Verify the laws for store credit expiration dates in your country before setting up store credit expiration dates.” It says country, while the law that matters here is a state’s. There is also a fee. For Shopify stores created on or after 12 May 2025, “orders that include store credit as a payment method are charged third-party transaction fees on the order amount paid for using store credit,” unless the store is on Plus with Shopify Payments. So a newer store outside that exception pays a transaction fee when a customer spends money the shop already collected, and paid a card fee on, the first time.
The software that handles this properly is a ledger, not a feature. Each credit needs an issue date, a source (a return, a gift certificate someone paid for, or a promotion), a balance and an expiry field that cannot be set earlier than four years out when the source is a return in Maryland. It also needs a report of every outstanding balance by age. That report is the one your accountant will want at year end, and it is also the one that shows how much of last spring’s sale is still sitting on customers’ accounts.
Tax-free week is a per-item cliff at $100
Maryland’s sales tax holiday takes a few lines in the statute, Tax-General §11–228, and about two thousand words in the regulation, COMAR 03.06.01.37. The regulation is the one your point of sale has to obey. The week runs from the second Sunday in August through the following Saturday. In 2026 that was 12:01 a.m. on Sunday, 9 August, to 11:59 p.m. on Saturday, 15 August, according to the Comptroller’s FAQ. Any article of clothing or footwear priced at $100 or less is exempt from the 6% sales tax. Accessories are not: “jewelry, watches, watchbands, handbags, handkerchiefs, umbrellas, scarves, ties, headbands, and belt buckles” stay taxable.
The rule is a cliff, not a deduction. A $110 pair of trousers is taxed on the whole $110, not on the $10 above the line (B(3)). The test is applied per item, whatever else is on the invoice, so two $80 shirts are both exempt (B(2)). A store’s own coupon lowers the price for the test, but a manufacturer’s coupon does not (F(2)). A $110 pair of shoes with a $10 store coupon is exempt, while the same shoes with a $10 manufacturer’s coupon are taxed on $110, which is $6.60. “Buy one, get one free” on $120 trousers is taxed on $120, while the same trousers advertised at 50% off, $60 each, are both exempt (G). Alterations are taxed even when they are rung up with exempt trousers (C(3)). A boxed shirt and tie sold at one price is taxable in full unless the shirt’s price is stated separately (E(1)).
The paragraph an online store should frame is N(2). A separately stated shipping charge is not part of an item’s price. A combined “shipping and handling” charge is part of it, even when it appears on its own line, and on a multi-item order it “shall be proportionately allocated to each item ordered, and separately identified on the invoice.” Take a $96 dress and a $44 sweater with $12 of “shipping & handling.” The dress’s share is 96/140 of $12, or $8.23, which makes its price $104.23, and the whole of it is taxed at $6.25. The sweater’s $3.77 share leaves it at $47.77, so it stays exempt. Rename the same $12 “shipping” and the dress is exempt too. The wording on a checkout line decides the tax on the dress.
The rest of the regulation reads like a specification. An online order qualifies if it is paid for and accepted for immediate shipment during the week, even if it is delivered later (M), but not if the shop charges at shipment and ships after the week ends. An exchange for the same item in another size is not taxed after the week (K(1)), while swapping for a different item is (K(2)). For 30 days after the holiday, a shop may refund tax on a returned qualifying item only with a receipt or other proof that tax was paid on it (L). And O is the sentence an auditor reads: “the retailer’s records shall clearly identify the type of item sold, the date the item was sold, and the sales price of the item.”
One more thing makes this worse, which is that the Textile Act and the tax holiday classify the same shelf differently.
| Item | Textile Act online rules apply? | Tax-free at $100 or less? | Agree? |
|---|---|---|---|
| Dress, sweater, jeans | Yes | Yes | Yes |
| Socks | Yes | Yes | Yes |
| Scarf | Yes (the FTC’s own origin example is a scarf) | No, an accessory | No |
| Necktie | Yes, unless permanently knotted | No, “ties” are accessories | No |
| Belt | No, belts are excluded | Yes, the Comptroller lists belts | No |
| Hat or cap | No, headwear is exempt | Yes, as clothing | No |
| Shoes and boots | No, footwear is exempt | Yes | No |
| Headband | No, headwear | No, an accessory | Yes |
| Handbag | No | No, an accessory | Yes |
| Jewelry | No, not a textile | No, an accessory | Yes |
Five of the ten rows disagree. (For the hat, the Comptroller’s FAQ uses “a hat and scarf set” as its example of an exempt item boxed with a taxable one.) Many boutiques file belts, hats, scarves and bags together under “Accessories,” and that one category is wrong for both laws. For the Textile Act it mixes a covered item, the scarf, with exempt ones. For the tax holiday it mixes exempt items, the belt and the hat, with taxable ones. A category tree cannot hold this. The fix is two independent flags on every product, set once when the product is created and read by every system that sells it.
Five cents a bag, itemized, and a report by the 25th
Baltimore City banned thin plastic checkout bags on 1 October 2021 and put a surcharge on the bags that replaced them. The ban sits in Article 7 of the City Code, where §62–3 says no dealer may supply a plastic checkout bag under 4 mils thick. The money sits in Article 28, the tax article, which few retail systems were built to read. Section 32–3 imposes a surcharge of 5 cents on every checkout bag, whether paper, compostable, or plastic of 4 mils or more, supplied “at the point of sale, pickup, or delivery.” Under §32–4 the dealer collects it and itemizes it “on any receipt, invoice, or like document issued to the customer.” The dealer keeps 4 cents and remits the rest by the 25th of the following month, together with a report of how many bags it handed out. Section 32–6(b) imposes a penalty of $1,000 for each month reports are not submitted or “suitable records” are not kept. The City’s guidance for retailers adds a small-shop accommodation: a store handing out fewer than 300 bags may report zero each month until its running total passes 300, and then report the total.
For a boutique that hands out 4,000 bags a year, the City’s entire share is $40, while the penalty for one month without suitable records is $1,000, twenty-five times as much. The words “pickup” and “delivery” matter for the online store. An order bought online and picked up in the shop owes the surcharge if it leaves in a branded paper bag, and the surcharge belongs on a receipt that the online checkout printed before anyone knew a bag would be involved. The rule is local, too. Montgomery County’s own bag law moved to a 10-cent charge on paper bags on 1 January 2026, so a boutique with a second location there runs two bag regimes from one register.
The online store is where all of this lands
Every rule above arrives at the same screen, and on most platforms it is the screen whose structure a boutique controls least. Social selling now leads to it as well. Meta’s business help center says that “as of September 2025, Shops on Facebook and Instagram now use website checkout,” so the Instagram shop that used to finish the sale inside the app now sends the buyer to your own website to pay. Whatever that page says about origin, fiber and former price, it now says to your social audience too.
If the product page is a regulated document, the product record behind it has to be designed like one. In a boutique that means a handful of fields and ledgers that the platforms treat as optional text, or do not have at all. The first is an origin statement held as a choice rather than a sentence: made in USA, imported, made in USA and imported, or made in USA or imported. It is set from the supplier record and checked against the label, and the page renders it where the rule wants it, in the description. The second is a fiber list held as ordered pairs of generic name and percentage. The label prints both, and the page may print the names only, but the page cannot print a partial list. Then come two independent flags, textile-covered and eligible for tax-free week, set once per product and never inferred from a category. Beyond those, the price needs its ledger, the credit needs its ledger, and the pickup order needs a bag line.
Non-textile goods need a different origin test, which trips up shops that sell both. The FTC’s Made in USA Labeling Rule, in force since 2021, forbids labeling a product “Made in the United States” unless final assembly or processing happens here, “all significant processing” happens here, and “all or virtually all ingredients or components” are made and sourced here (16 CFR 323.2). The rule covers the same mail order promotional material, electronic included (323.1(b), 323.3), and a violation is treated as a violation of an FTC trade regulation rule (323.4), which is what opens the door to civil penalties. Garments follow the Textile Act’s different, one-step-back test instead, under which a garment made here of fabric made here is “Made in U.S.A.” wherever the fiber came from. So a Baltimore boutique selling a locally sewn dress and a locally poured candle is applying two different origin standards in one catalog, and the software should know which test each product answers to.
There is a search argument in the same fields, and it is the one that pays for them. Schema.org’s Product type has material and countryOfOrigin properties. A product page that keeps fiber and origin as data, rather than prose, can publish them as structured data, where they feed search results, shopping surfaces and the AI assistants that increasingly answer the question “is this sweater actually wool?” before anyone clicks. The disclosure the FTC requires is also the most specific, most citable fact on the page. A boutique that stores it properly gets compliance and better product data from the same work.
The customer data behind all this carries its own rules. A loyalty program, an email list and a purchase history are personal data under Maryland’s privacy law, whose thresholds we explain in our guide to the Maryland Online Data Privacy Act for online stores, and they are worth designing around before the list is large rather than after.
What custom actually costs, and when it does not pay
Our prices are published and fixed. A one-week Prototype Sprint is $3,500, a custom online store starts at $6,000, and a custom app, internal tool or operations system starts at $12,000. The price is agreed before we start, and you own every line of code.
The honest question is which part of the stack a build actually replaces. Card processing does not go away, because Square’s or Stripe’s rate applies to money moving through your own software exactly as it does through a rented one, and nothing we build makes a card payment cheaper. Email marketing is a commodity worth renting, so I leave Klaviyo in place too. What a build can replace, if it takes over both the storefront and the register software while the card reader stays on a processor plan with no monthly fee, is the store plan, the point-of-sale license and the three apps. That comes to $2,170.38 a year in the lean stack and $5,579.88 in the comfortable one. It is the generous version of the calculation, because free processor plans charge slightly higher card rates, which I have not netted out.
| Stack | Replaceable layer per year | $6,000 online store pays back in | $12,000 build pays back in |
|---|---|---|---|
| Lean | $2,170.38 | 33.2 months | 66.3 months |
| Comfortable | $5,579.88 | 12.9 months | 25.8 months |
On subscriptions alone, the lean boutique should not build, and we would tell it so on the call. A payback measured in years on software that works is a poor use of $6,000. The comfortable shop is closer to a reasonable decision, but the subscriptions are still not the real reason to build. The real reason is the four things in the middle of this article that no subscription records: the price history behind a markdown, the origin and fiber facts on a product page, the age of every credit slip, and the per-item tax logic for one week in August. The cost of not having them does not appear on any invoice. It shows up as a sale you cannot defend, a credit slip that turns out to be void, or a tax-free week rung up by hand.
The live channel is the one place where a percentage is large enough to change the arithmetic. At $120,000 a year of live sales, CommentSold’s Starter plan takes $8,988 before card fees. Even so, we would rarely advise replacing it, because what you are paying for there is audience and a finished workflow on top of Meta’s platforms, not the software. The usual answer is to connect it rather than replace it, so live orders land in the same ledgers as everything else.
What we would actually build
Everything above points to one design decision: a boutique’s system has to store facts the law asks about as data, with history, rather than as text that gets overwritten. There are five structures, and none of them is exotic engineering.
A product record carries the origin choice, the ordered fiber list, the textile-covered and tax-free-eligible flags, and a link to the supplier and the label it arrived with. When the shop sews in its own label, the record keeps what was removed and where the garment came from for the three years §70d(b) asks for. The storefront renders the origin statement and the fiber names from that record automatically, publishes them as structured data, and refuses to publish a garment page that has none.
A price ledger appends every price change with a timestamp and never overwrites one. A markdown can only display a compare-at price that the ledger shows was the real price for a period you set, and the same query produces an EU-style 30-day prior price the day you decide to ship abroad.
A credit ledger records every store credit with its source, issue date, balance and expiry. It refuses an expiry earlier than four years for a Maryland return credit, keeps promotional credit as a separate kind of balance, and produces a report of outstanding balances by age for the accountant.
A tax calculation that knows about August applies the $100 test per item, distinguishes store coupons from manufacturer coupons, allocates a combined shipping-and-handling charge across items and shows each share on the invoice, prices sets correctly, and handles exchanges across the end of the week. For the rest of the year it steps aside and lets your normal tax settings run.
A bag counter adds an itemized 5-cent line at the register and on every pickup order, tracks the monthly count, and produces the report due on the 25th with a running total for the City’s 300-bag rule.
Payments stay with Square or Shopify Payments, the card readers stay on the counter, and Klaviyo keeps sending the emails. If you want to see the shape of what we mean, our demos page has a working e-commerce build you can click through, and our write-up of building a full online store in a weekend shows how fast the storefront part goes when the data model is right.
Build, or keep paying
Here is the honest test, and the only list in this article:
- Keep renting when your online store is a small share of sales, when you rarely run markdowns online, when your return policy is cash refunds with no store credit, and when nobody on your team is retyping origin and fiber details from the neck label into a description box for every new arrival. The stack above is cheap and good, and the payback on a build would run into years.
- Build when a meaningful part of your revenue is online or live, when your sales depend on crossed-out prices you could not currently prove, when store credit is how you handle most returns and you do not know how much of it is outstanding or how old it is, when tax-free week means a week of manual overrides at the register, or when a private-label line means you are replacing labels with no record of what you removed.
Most boutiques will land in the middle. They keep the processor and the point of sale, and they own the parts where the law actually looks: the product record, the price history and the credit ledger. That is a $6,000 to $12,000 decision, not a rebuild, and it is the one we would recommend most often.
When you should not call us
If you are one person selling at markets and through a small online shop, software is not your bottleneck, and we would be a bad use of your money. A free point-of-sale plan and a basic online store will carry you a long way, and the rules above are handled well enough by a careful description template. If your real problem is buying, meaning too much stock in the wrong sizes, we cannot fix it with code, and a good inventory report in the tools you already have will teach you more. And if you are planning to leave Shopify just because it annoys you, do not. Everything above can be built alongside it.
How we work
The price is fixed and agreed before we start. You talk to the people writing the code, with no account-management layer in between. You own every line, in your own repository, on your own infrastructure, from the first commit. We start with the one screen costing you the most, which in a boutique is usually the product record, because everything else hangs off it. If a week of work would tell us both whether the rest is worth doing, that is what the $3,500 Prototype Sprint is for, and it is credited against the full project if you go ahead.
Questions we get from boutique owners
Do I have to say “Made in USA” or “imported” on my online store’s product pages?
Yes, for garments and most other textile products. Since 1984 the Textile Fiber Products Identification Act has treated a mail order catalog description as deceptive unless it says clearly and conspicuously whether the item was made in the USA, imported, or both (15 U.S.C. §70b(i)). Since a 1998 FTC amendment, the definition of mail order catalog covers material distributed electronically, which includes a product page (16 CFR 303.1(u) and 303.34). The accepted forms are “Made in U.S.A.,” “Imported,” “Made in U.S.A. and imported” and “Made in U.S.A. or imported,” and the statement must be consistent with the garment’s own label. Shoes, hats, handbags and belts fall outside the Textile Act.
Is it legal to show a compare-at or “was” price in Maryland?
Yes, if the former price is genuine. The FTC’s Guides Against Deceptive Pricing (16 CFR 233.1) accept a former-price comparison when that price was the actual, bona fide price at which the item was openly offered for a reasonably substantial period in the recent, regular course of business. Maryland’s Consumer Protection Act separately lists a false or misleading representation about “one’s own price at a past or future time” as an unfair or deceptive trade practice (Commercial Law §13–301(6)(ii)), with civil penalties of up to $10,000 per violation and $25,000 for repeats, as well as a private right of action. Keep a record of when each price was actually charged, because the compare-at field in most store platforms stores only the number.
How long does a price have to be in effect before I can advertise a sale from it?
U.S. federal law gives no fixed number of days; the FTC asks for “a reasonably substantial period of time.” California’s statute (Business and Professions Code §17501) uses the three months before the advertisement, unless the date the former price prevailed is stated. The European Union has required since 28 May 2022 that the prior price shown with any reduction be the lowest price applied over a period of not less than 30 days before it (Article 6a of Directive 98/6/EC). Lithuania wrote the rule into its Civil Code in 2021, including that an item offered for less than 30 days uses its actual offer period. A price ledger lets you apply whichever standard is strictest wherever you sell.
Can store credit expire in Maryland?
Not within four years if it was issued for returned goods. Maryland Commercial Law §14–1319 defines a gift certificate to include a device “issued as a store credit for returned goods” and prohibits selling or issuing one that, within four years after the date of purchase, is subject to expiration or any fee. A certificate issued in violation is treated as valid, with no expiration or fees. Any term that takes effect after four years must be printed in at least 10-point type. Credit handed out under a loyalty or promotional program, where the customer gave no money or value for it, falls outside the definition.
Does Maryland’s tax-free week apply to online orders?
Yes. Under COMAR 03.06.01.37M, an eligible item qualifies if it is both paid for and delivered during the tax-free period, or if the customer orders and pays for it and the retailer accepts the order for immediate shipment during the period, even when delivery happens afterward. It does not qualify if the item is backordered and the retailer charges only when it ships after the period ends. The week runs from 12:01 a.m. on the second Sunday of August through the following Saturday, which in 2026 was 9 to 15 August. Clothing and footwear priced at $100 or less per item are exempt; accessories such as scarves, ties, handbags and jewelry are not.
Does shipping count toward the $100 limit during Maryland’s tax-free week?
A separately stated shipping or delivery charge does not. A combined “shipping and handling” charge does, even when it is shown on its own line, and on a multi-item order it must be split across the items in proportion to their prices and shown separately on the invoice (COMAR 03.06.01.37N). For example, $12 of shipping and handling on a $96 dress and a $44 sweater puts $8.23 on the dress, which makes its price $104.23 and fully taxable, while the sweater stays exempt at $47.77.
Do I have to list fiber content in an online clothing listing?
Only if the listing mentions or implies a fiber, which many listings do. Under 15 U.S.C. §70b(c), any disclosure or implication of fiber content in a written advertisement requires the same fiber information as the label: every fiber at 5% or more, by generic name, in order of predominance by weight. The percentages may be left out of the ad. An advertisement that uses a generic fiber name or a fiber trademark must make the full disclosure at least once (16 CFR 303.41(a)). The sewn-in label itself must show the percentages.
Can I call a fabric “bamboo” in my store?
Not on its own, if the fabric is rayon made from bamboo, which most soft “bamboo” textiles are. The Textile Act requires the generic name of the fiber, which here is rayon or another name the rules recognize, such as lyocell or viscose, and the FTC accepts “rayon made from bamboo.” In April 2022 the FTC announced civil penalties of $2.5 million against Kohl’s and $3 million against Walmart for marketing rayon textiles as bamboo, after warning 78 retailers about the practice in 2010.
Does the Baltimore City bag fee apply to clothing boutiques?
Yes. Baltimore City Code Article 28, §32–3 imposes a 5-cent surcharge on every checkout bag (paper, compostable, or plastic at least 4 mils thick) that a dealer supplies at the point of sale, pickup or delivery, and “dealer” includes any shop. The surcharge must be itemized on the receipt. The shop keeps 4 cents and remits 1 cent per bag by the 25th of the following month, with a report of the number of bags (§32–4). Failing to file reports or keep suitable records carries a $1,000 penalty for each month (§32–6(b)). Plastic checkout bags thinner than 4 mils are banned outright (Article 7, §62–3).
How much does boutique POS and e-commerce software cost?
For a modeled Baltimore boutique with $700,000 a year in card sales, 30% of it online, the app layer at published prices runs from about $2,890 a year to about $6,780. The lean version is Shopify Basic on annual billing, Shopify POS Pro, AfterShip returns, Kiwi Sizing, Smile.io and Klaviyo; the comfortable one is Shopify Grow, POS Pro, Loop, Kiwi Ultimate, Smile Standard and a larger Klaviyo tier. Card processing costs more than all of it: at Square’s published Plus-plan rates the same shop pays about $20,479 a year, or 2.93% of sales. Live selling adds its own percentage; CommentSold’s Starter plan is $149 a month plus 6% of live sales.
Is it worth building custom software for a clothing boutique?
On subscription savings alone, usually not for a small shop. Replacing the modeled lean stack, about $2,170 a year excluding email, with a $6,000 custom online store pays back in roughly 33 months, while the comfortable stack, about $5,580 a year, pays back in about 13 months. The stronger case is what off-the-shelf tools do not record: a price history that can prove a compare-at price, origin and fiber fields that reach the product page, a store-credit ledger that honors Maryland’s four-year rule, per-item tax-free-week logic and the monthly bag report. If those gaps are costing you sales or exposing you to risk, a fixed-price build of $6,000 to $12,000 is worth pricing.