Migrate your Paprika recipes to Savvy
Every recipe you’ve kept in Paprika, imported into Savvy without retyping one of them. Here’s the whole route, start to finish, and a straight answer about the few things that don’t make the trip.
Three steps, and your own assistant does the hard one.
Export your Paprika recipes as HTML
One menu in the Mac or Windows app, every recipe in one go. It writes a folder of readable pages — nothing to unpack.Hand the folder to an AI assistant with the prompt below
ChatGPT, Claude, Gemini — whichever one you use, and a free account will do. It reads your Paprika pages and writes them out in the shape Savvy reads.Paste what comes back into Savvy
The whole library arrives as one job, not one job per recipe. Two hundred recipes take about as long as one.
Savvy publishes a prompt rather than a Paprika importer. It’s the same route every app on Move from another app takes, written out here just for Paprika.
Export as HTML, not the Paprika format.
On the Mac or Windows app, open File → Export in the menu bar. Choose All Recipes so nothing is left behind, pick HTML, and save the folder somewhere you’ll find it. On iPhone or iPad the same thing lives under Settings → Export Recipes.
Paprika offers two formats and HTML is the one to take. It writes a folder with one readable page per recipe and an index.html listing them — an assistant reads it straight. The other option, .paprikarecipes, is a zip of compressed files that has to be unpacked twice before anything can read it. There’s no reason to make that work for yourself.
This makes a copy. It reads your recipes out of Paprika and changes nothing in it — your Paprika library is exactly where it was when you’re done.
You’ll need an AI assistant for this bit.
Any AI assistant will do — ChatGPT, Claude, Gemini, whichever one you already use — because something has to translate between the shape Paprika chose and the shape Savvy reads. If you don’t use one, they all have a free version and signing up takes a minute.
Below is the message you send it. That’s all a prompt is: the words you type into the box. This one is written for Paprika — it knows Paprika’s fields, it keeps your ingredient headings, and it says what to do with the handful of things Savvy has no home for. Copy it, open your assistant, paste it in, attach the folder you exported, and send.
Attached is my recipe collection, exported from Paprika as
HTML. Convert every recipe in it into Savvy's archive format.
Output one JSON array. Each element is one recipe, shaped
exactly like this:
{
"recipe": {
"core": {
"name": "Lemon drizzle cake",
"description": "A plain loaf with a crunchy top.",
"source": { "source_type": "json",
"description": "BBC Good Food",
"url": "https://…" },
"yield": { "raw": "Serves 8" },
"ingredient_groups": [
{ "name": "For the cake",
"ingredients": [
{ "ingredient_name": "plain flour",
"quantity": { "value": 225, "unit": "g" },
"note": "sifted" },
{ "ingredient_name": "salt" }
] }
],
"method_groups": [
{ "name": null,
"steps": [
{ "order": 1, "text": "Heat the oven to 180C." }
] }
],
"notes": [ { "heading": "From Paprika",
"content": "Prep 20 min. Cook 45 min. Rated 5/5. Difficulty: easy." } ]
},
"metadata": { "cuisine": "british",
"meal_type": "dessert" }
},
"collection": { "name": "From Paprika", "position": 1 }
}
Where Paprika's fields go:
- Name -> core.name
- Description -> core.description
- Ingredients -> core.ingredient_groups. A Paprika line ending
in a colon is a heading: start a new group and use that line
as the group "name". Where there are no colon headings, use
one group with "name": null.
- Directions -> core.method_groups, numbered from 1.
- Servings -> core.yield.raw, as written.
- Source and Source URL -> core.source.description and
core.source.url.
- Notes -> a note with "heading": "Notes".
- Categories -> metadata.meal_type if one of them names a meal
(breakfast, lunch, dinner, dessert, snack). Otherwise leave
meal_type out. Never invent one.
Savvy has no field for prep time, cook time, rating,
difficulty or nutritional info. Do not drop them. Put whichever
of them the recipe has into one note with "heading": "From
Paprika", written as plain sentences like the example above. A
recipe with none of them gets no such note.
Rules:
- "core" and "metadata" must both be present on every recipe,
and "core" must have "name", "ingredient_groups" and
"method_groups". Everything else is optional.
- Keep every quantity exactly as written. Do not convert units.
- "value" is a number: 0.5, not "1/2". Where a line gives a
range, use the lower number and put the range in "note".
- "unit" is the unit as written, or "" where there isn't one.
- Leave "quantity" out entirely for anything unmeasured, like
salt to taste.
- Ignore index.html. It is a contents page, not a recipe.
- One element per recipe. Do not merge, shorten or improve
anything.
- If a field isn't in my export, leave it out. Don't invent it.
- Output only the JSON array. No commentary.What comes back is one block of JSON, starting with [ and ending with ]. It will look like nothing you recognise, and it isn’t meant to — it’s your recipes written in the shape Savvy reads. You don’t need to save it or name it. The next step is a copy and a paste, so leave it on screen.
Nothing in that prompt asks your assistant to be clever. It asks it to move your recipes without touching them. The shape it spells out is the one Savvy checks every record against, field for field, which is why it’s written out in full rather than described.
Four presses, and it’s in.
Sign in
A free account is enough. Nothing about moving your library sits behind the paywall.Press + Add recipe
It’s in the navigation, on every screen. It opens one box, and that box is where everything enters Savvy — a link, a photo, a whole library.Paste the whole array into the box
All of it, from the first bracket to the last, not one recipe at a time. Savvy recognises it as a library rather than reading it as a recipe. A few hundred recipes go in one paste.Send
One run. The progress list names every recipe in the file up front, then fills them in one by one, so you can watch your whole Paprika library arrive.
They arrive as drafts, which is one filter in your recipe list — so the whole import sits together in one place while you read through it, instead of scattering into an archive you then have to search.
Your recipes whole, and a straight answer on the rest.
Your recipes arrive whole
Name, description, every ingredient with its quantity and its note, every direction in order, servings, the source and its link, and your own notes. That is the recipe, and none of it is touched on the way.
Your ingredient headings survive
A Paprika ingredient line ending in a colon is a heading, and Savvy groups ingredients the same way. So "For the sponge:" comes across as a group rather than as an ingredient called "For the sponge". The prompt above knows that convention.
Times, rating, difficulty and nutrition become a note
Savvy stores no prep time, cook time, star rating or difficulty, and no nutritional information. Rather than lose them, the prompt writes whichever ones a recipe has into a note headed "From Paprika". They stop being fields you can sort by and become something you can read.
Photos do not come across
An HTML export writes your photos next to the pages as files on your own disk, and Savvy needs an address it can reach. So recipes arrive without their pictures, and you add a cover to the ones you care about. This is the real cost of moving, and it is the only one.
A free account holds fifty recipes, which is the whole of the free plan. A paid archive has no ceiling, and bringing a converted library in is never rationed against the monthly import allowance — it costs Savvy nothing to run, so it isn’t metered.
What to do once it’s in.
Paprika keeps working
Nothing about this touches your Paprika library. It is a copy, made from a file you exported, and the original is exactly where it was. Run the import, read what arrived, and delete nothing until you are satisfied.
Imported recipes land as drafts
Drafts are one filter in your recipe list, so the whole import sits together while you read through it. Two hundred recipes scattered into an archive would be two hundred recipes you then had to find.
Read a handful of recipes before trusting the rest
The conversion was your assistant’s work, which means its quality is your assistant’s too. Open five, check the quantities against Paprika, and you will know within a minute whether the other hundred are right.
The road out is the same road: Savvy exports your whole archive as one file whenever you want it, free on every plan. See how export works.
Start in Paprika.
Open File → Export and get the HTML folder out first. That’s the only step nobody can do for you, and it’s the one that takes two minutes.