Written, not translated.

A listing in Spanish or French should read like someone from there wrote it. How roopafy writes every language natively, and why every draft is read by a second AI agent, one that didn't write it and checks it against your photos, before it ever reaches you.

You can tell a translated product page within a sentence. The grammar is fine. The words are real. And yet nobody in Madrid or Lyon would ever write it that way. The title leads with the wrong word. The description is polite where it should be warm. The search terms are the English ones, carried across faithfully, and nobody searches for them.

That page doesn't just read badly. It sells badly. Shoppers trust a listing that sounds like it was written for them, and search engines rank the words people actually type, which are rarely the words a translation produces.

So when we brought Spanish and French to roopafy listings, we set ourselves one rule before anything else: we don't translate.

Every language, written from scratch

When you ask roopafy for a listing in three languages, you get three listings, each one written from the garment itself: its category, its details, its fabric, the facts you've confirmed, the voice of your brand. The Spanish copy never sees the English copy. It isn't allowed to.

That sounds like a small decision. It's the whole decision. The moment a writer can see another language's draft, it starts to echo it: sentence shapes, word order, the same three selling points in the same order. What you get back is a translation that happens to have been written by a model. We fine-tuned our models to think in the target language from the first word, the way a local copywriter would, and to reach for the words a local shopper would search for, not the dictionary equivalent of ours.

The facts stay the same everywhere; the writing doesn't. A detail you add by hand, like "made in Portugal" or "runs small", reaches every language as a fact to include, never as a sentence to copy.

A roopafy listing for a floral tank top with English, Spanish and French tabs; the Spanish tab is open, showing a title, SEO title, description and meta description written in Spanish, beside a café lifestyle photo of the model wearing the top
One listing, three languages. The Spanish tab isn't a translation of the English one: it's written on its own, from the same garment and the same facts, and it's a full editor with its own options and edits.

The writer doesn't mark its own homework

Anyone who has written for a living knows the problem with checking your own work: you read what you meant, not what you wrote. Generative models have the same blind spot, only more so. Ask the model that wrote a paragraph whether it's right and it will usually agree with itself, with total confidence.

So in roopafy, the agent that writes your listing is never the agent that approves it. Every draft, in every language, English included, is read by a separate reviewing agent: one that didn't write it, doesn't share its habits, and has a single job, which is to be skeptical. Is this really Spanish, or English wearing Spanish words? Would a native reader stumble? Is every claim in here actually true of this garment?

When the reviewer finds something serious, the draft goes back to be written again with the problem named. When it finds something small, it tells you in plain words. And when it can't be sure, it says so, instead of quietly waving the copy through.

The French tab of a roopafy listing. The copy check reads 'Worth a quick read' and notes that the description reads a little unnatural in places, quoting the sentence, with Approve and Rewrite French buttons below
The reviewer read the French description and flagged one sentence a native reader would stumble on. It says so in plain words, quotes the line, and leaves the call to you: approve it as it is, or have it written again.

It checks the words against your photos

Here is the failure we worried about most. A garment's details come from reading its photos, and reading is never perfect. If that first read gets the neckline wrong, the writer will describe the wrong neckline, beautifully and in three languages, and a reviewer reading only the text will find nothing wrong with it. Every word agrees with every other word. They're all wrong together.

The only independent witness is the garment itself. So our reviewer doesn't just read the listing; it looks at your photos, front and back, and asks whether the copy describes what's actually there.

And when the words and the photo disagree, we made a decision that surprised a few people: we don't correct it. We leave it out.

It's tempting to let the reviewer swap in what it thinks it sees. But a reviewer can misread a photo too: phone lighting shifts colours, a back view hides a neckline, a shadow looks like a seam. Replacing one guess with another just moves the risk around and prints it with more confidence. Leaving the detail out costs you, at most, a word of description. A wrong detail costs you a return and a review.

So the detail is left out of every language, and roopafy tells you why: "Our photo check doesn't agree with this, so we left it out. Confirm it or fix it." You look at your own garment and make the call. One tap puts it back.

What we never let a model decide

Some claims don't belong to a model at all. You can't see fibre content in a photograph, and "100% cotton" on a listing is a promise that labelling rules hold you to. So fabric and care claims come only from what you've confirmed, in every language, and the reviewer checks that no language has quietly grown a claim the others don't support. The same restraint runs through the rest of roopafy: a model can have a hunch; only you can make a promise.

Then there are the details only a native reader notices, and notices immediately. French puts a space before its colons and question marks, and uses its own quotation marks. Spanish opens its questions and exclamations upside down. Your brand name should arrive in every language exactly as you spell it, never "helpfully" translated. None of this is glamorous. All of it is the difference between a page that reads as local and one that reads as imported.

The humans are still in the loop

An AI checking an AI is a strong filter. It isn't the last word. So Spanish and French stay labelled beta in roopafy until real native speakers, reading real listings, tell us they're ready, and we've set ourselves a clear bar to clear before that label comes off.

And you stay in charge of your own listing. Every extra language is yours to approve before it's published. If you edit a language by hand, it's never silently overwritten; if the facts behind it change, roopafy tells you which languages may be missing the change and lets you decide when to refresh them. Nothing reaches your store that you haven't seen.

The listing language row in roopafy: the listing is in English, with a language picker to change the main language and a link to add another language
You decide which language a listing is written in and which ones sit alongside it. Nothing is picked for you, and nothing changes until you choose.

Why we built it this way

Most tools will translate your listing for you. It's the easy version, and it looks fine in a demo. We think the hard version is the only one worth shipping, because the people reading your listing in Seville or Montréal aren't grading a demo. They're deciding whether to trust you with their money, in the language they think in.

So every language is written, not translated. Every draft gets a second, skeptical reader that has seen your garment. Every doubt comes to you instead of being guessed away. It's more work than translation. That's rather the point.

If you'd like to see it for yourself, pick the Casual · Multilingual content style on your next listing: English, Spanish and French, each one written for the people who'll read it.

Shot on location. No location required.

roopafy turns one phone photo into a complete Shopify-ready fashion listing in under five minutes, with a lifestyle set shot in a real place. The beta is open.

Register for the beta