HelloFresh
Meal-kit subscription — this week's menu, plan pricing, delivery availability by ZIP, and the public recipe archive on hellofresh.com.
Domain: hellofresh.com
Also known as: HelloFresh, HelloFresh.com, Hello Fresh
Call it directly
bowmark.providers.hellofresh.getWeeklyMenu(week?: string): Promise<HellofreshMeal[]>
bowmark.providers.hellofresh.checkDeliveryAvailability(zip: string): Promise<HellofreshDeliveryAvailability>
bowmark.providers.hellofresh.getRecipe(recipeUrlOrId: string): Promise<HellofreshRecipeDetail>
bowmark.providers.hellofresh.searchRecipes(query: string, options?: { take?: number; skip?: number }): Promise<HellofreshRecipeSearchPage>Functions
| Function | What it does |
|---|---|
getWeeklyMenu | Reads every meal on offer for one delivery week — name, subtitle, its recipe URL, dietary/preference tags, and any per-serving premium surcharge. |
checkDeliveryAvailability | Answers whether HelloFresh delivers to a US ZIP code and which delivery days it can choose, without signing up for anything — deliversTo, the distinct weekday windows (options, each… |
getRecipe | Reads one recipe page in full — description, difficulty, total time, cuisines, allergens, the cookware ("utensils") it calls for, per-serving nutrition, the numbered steps (each with its… |
searchRecipes | Searches HelloFresh's whole public recipe archive by keyword or ingredient ("chicken", "salmon", "thai", "beef tacos") and returns matching recipes with enough identity to pick one: name,… |
Types
interface HellofreshTag { name: string; slug: string }
interface HellofreshSurcharge {
amount: string; // "$7.99"
amountCents: number;
reason: string;
}
interface HellofreshMeal {
id: string; // recipe.uuid — stable across weeks a meal repeats
name: string;
subtitle: string | null;
slug: string;
recipeUrl: string;
imageUrl: string | null;
tags: HellofreshTag[];
surcharge: HellofreshSurcharge | null; // null on an included (non-premium) meal
category: string | null;
cuisines: string[];
difficulty: number | null; // the site's own 1-5 scale
prepTimeMinutes: number | null;
totalTimeMinutes: number | null;
calories: number | null;
isSoldOut: boolean; // still returned when true, never dropped
}
interface HellofreshDeliveryOption {
handle: string; // "US-1-0800-2000", "US-3-0800-2000-AKHI"
name: string; // "Mondays: 8AM - 8PM"
weekday: number; // ISO: 1 = Monday … 7 = Sunday
from: string | null; // "08:00"
to: string | null; // "20:00"
surcharge: HellofreshSurcharge | null; // null on a free window; AK/HI carry one
}
interface HellofreshDeliverySlot {
week: string; // "2026-W33" — the same key getWeeklyMenu takes
deliveryDate: string;
cutoffDate: string | null;
option: HellofreshDeliveryOption;
isBlocked: boolean;
}
interface HellofreshDeliveryAvailability {
zip: string;
deliversTo: boolean; // false when the site returns no slots at all
options: HellofreshDeliveryOption[]; // distinct windows, by weekday
slots: HellofreshDeliverySlot[];
weeks: string[];
}
interface HellofreshAllergen { name: string; slug: string }
interface HellofreshUtensil { name: string }
interface HellofreshNutrient { name: string; amount: number; unit: string }
interface HellofreshRecipeIngredient {
id: string;
name: string;
amount: number; // 0 for an unmeasured pantry staple (salt, pepper, oil)
unit: string; // "" to match — never invented
}
interface HellofreshRecipeYield {
servings: number; // HelloFresh publishes at most 2 and 4
ingredients: HellofreshRecipeIngredient[];
}
interface HellofreshRecipeStep {
index: number;
instructions: string;
imageUrl: string | null; // null when the site attached no photo to this step
}
interface HellofreshRecipeDetail {
id: string;
name: string;
headline: string | null;
slug: string;
websiteUrl: string;
description: string | null;
imageUrl: string | null;
difficulty: number | null; // the site's own 1-5 scale
totalTimeMinutes: number | null;
cuisines: string[];
allergens: HellofreshAllergen[];
utensils: HellofreshUtensil[];
nutritionPerServing: HellofreshNutrient[];
yields: HellofreshRecipeYield[]; // ingredients pre-scaled per box size
steps: HellofreshRecipeStep[];
averageRating: number | null;
ratingsCount: number | null;
}
interface HellofreshRecipeSearchResult {
id: string; // the 24-hex id — pass straight to getRecipe
name: string;
headline: string | null;
slug: string;
websiteUrl: string;
imageUrl: string | null;
description: string | null;
difficulty: number | null; // the site's own 1-5 scale
totalTimeMinutes: number | null;
category: string | null; // "Poultry", "Veggie", …
cuisines: string[];
tags: HellofreshTag[];
allergens: HellofreshAllergen[];
calories: number | null;
averageRating: number | null;
ratingsCount: number | null;
}
interface HellofreshRecipeSearchPage {
query: string;
total: number; // how many the archive holds, not how many came back
take: number;
skip: number;
results: HellofreshRecipeSearchResult[];
}Examples
// What's on the menu this week that has no premium surcharge and is Pork-free?
const meals = await bowmark.providers.hellofresh.getWeeklyMenu();
return meals
.filter((m) => !m.surcharge && m.tags.some((t) => t.slug === "pork-free"))
.map((m) => ({ name: m.name, subtitle: m.subtitle, recipeUrl: m.recipeUrl }));// Compare this week and next week's premium (surcharge) meals.
const [thisWeek, nextWeek] = await Promise.all([
bowmark.providers.hellofresh.getWeeklyMenu(),
bowmark.providers.hellofresh.getWeeklyMenu("2026-W34"),
]);
const premium = (meals) => meals.filter((m) => m.surcharge).map((m) => m.name + " (" + m.surcharge.amount + ")");
return { thisWeek: premium(thisWeek), nextWeek: premium(nextWeek) };