{
  "id": "d85d3899-1176-4ff0-9118-8737c74cc3d1",
  "title": "Spinach Meatballs With Pasta",
  "schemaVersion": "1.0.0",
  "notes": [],
  "steps": [
    {
      "id": "step1",
      "text": "In a large bowl, stir together the spinach, ½ cup of the spinach liquid, panko, egg, 1 teaspoon chopped garlic, 1 teaspoon Diamond Crystal kosher salt (or ½ teaspoon coarse kosher salt) and a few grinds of pepper. Let sit for 5 minutes, until the panko is softened.",
      "title": null,
      "timers": [
        {
          "text": "5 minutes",
          "secondsMax": null,
          "secondsMin": 300
        }
      ],
      "consumes": [],
      "produces": [],
      "dependsOn": [],
      "equipmentIds": [],
      "originalText": "In a large bowl, stir together the spinach, ½ cup of the spinach liquid, panko, egg, 1 teaspoon chopped garlic, 1 teaspoon Diamond Crystal kosher salt (or ½ teaspoon coarse kosher salt) and a few grinds of pepper. Let sit for 5 minutes, until the panko is softened.",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing1"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing2"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing3"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing4"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing5"
        }
      ]
    },
    {
      "id": "step2",
      "text": "Add the beef, pork, Parmesan and parsley. Mix with your hands until just combined, avoiding overmixing. Using oiled hands, roll the mixture into 18 balls (each about 2 heaping tablespoons, about 50 grams each) and place on a plate or sheet pan as you go. If the meat is soft and not holding its shape, refrigerate for 5 to 10 minutes to firm.",
      "title": null,
      "timers": [
        {
          "text": "5 to 10 minutes",
          "secondsMax": 600,
          "secondsMin": 300
        }
      ],
      "consumes": [],
      "produces": [],
      "dependsOn": [
        "step1"
      ],
      "equipmentIds": [],
      "originalText": "Add the beef, pork, Parmesan and parsley. Mix with your hands until just combined, avoiding overmixing. Using oiled hands, roll the mixture into 18 balls (each about 2 heaping tablespoons, about 50 grams each) and place on a plate or sheet pan as you go. If the meat is soft and not holding its shape, refrigerate for 5 to 10 minutes to firm.",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing6"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing7"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing8"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing9"
        }
      ]
    },
    {
      "id": "step3",
      "text": "In a large Dutch oven or heavy-bottomed pot, heat the oil over medium. Working in batches to avoid crowding, add the meatballs and cook until browned on two sides, 3 to 6 minutes per side. Return to the plate and repeat with the remaining meatballs. (They will not be cooked through yet.)",
      "title": null,
      "timers": [
        {
          "text": "3 to 6 minutes",
          "secondsMax": 360,
          "secondsMin": 180
        }
      ],
      "consumes": [],
      "produces": [],
      "dependsOn": [
        "step2"
      ],
      "equipmentIds": [],
      "originalText": "In a large Dutch oven or heavy-bottomed pot, heat the oil over medium. Working in batches to avoid crowding, add the meatballs and cook until browned on two sides, 3 to 6 minutes per side. Return to the plate and repeat with the remaining meatballs. (They will not be cooked through yet.)",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing10"
        }
      ]
    },
    {
      "id": "step4",
      "text": "Without cleaning the pot, reduce heat to medium-low and add the remaining garlic. Stir to coat in the fat, then carefully add the crushed tomatoes, the herb sprigs and a pinch of salt. Scrape up the stuck-on browned bits. Once gently simmering, add the meatballs and any drippings from the plate. Cook, flipping the meatballs occasionally, until the meatballs are cooked through and the sauce is rich, 20 to 25 minutes. Turn off the heat.",
      "title": null,
      "timers": [
        {
          "text": "20 to 25 minutes",
          "secondsMax": 1500,
          "secondsMin": 1200
        }
      ],
      "consumes": [],
      "produces": [],
      "dependsOn": [
        "step3"
      ],
      "equipmentIds": [],
      "originalText": "Without cleaning the pot, reduce heat to medium-low and add the remaining garlic. Stir to coat in the fat, then carefully add the crushed tomatoes, the herb sprigs and a pinch of salt. Scrape up the stuck-on browned bits. Once gently simmering, add the meatballs and any drippings from the plate. Cook, flipping the meatballs occasionally, until the meatballs are cooked through and the sauce is rich, 20 to 25 minutes. Turn off the heat.",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing4"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing5"
        },
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing11"
        }
      ]
    },
    {
      "id": "step5",
      "text": "While the meatballs are simmering, bring a large pot of salted water to a boil. When the meatballs are done, add the pasta to the water and cook until al dente according to package directions. Reserve 1 ½ cups pasta water, then drain and return the pasta to the pot.",
      "title": null,
      "timers": [],
      "consumes": [],
      "produces": [],
      "dependsOn": [],
      "equipmentIds": [],
      "originalText": "While the meatballs are simmering, bring a large pot of salted water to a boil. When the meatballs are done, add the pasta to the water and cook until al dente according to package directions. Reserve 1 ½ cups pasta water, then drain and return the pasta to the pot.",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing12"
        }
      ]
    },
    {
      "id": "step6",
      "text": "Add about 1 cup of the tomato sauce to the pasta, along with ½ cup pasta water. Toss over medium-high until the pasta is glossed in sauce; add more sauce and pasta water as needed until lightly coated. Serve the pasta topped with the meatballs, more sauce and more grated Parmesan.",
      "title": null,
      "timers": [],
      "consumes": [],
      "produces": [],
      "dependsOn": [
        "step4",
        "step5"
      ],
      "equipmentIds": [],
      "originalText": "Add about 1 cup of the tomato sauce to the pasta, along with ½ cup pasta water. Toss over medium-high until the pasta is glossed in sauce; add more sauce and pasta water as needed until lightly coated. Serve the pasta topped with the meatballs, more sauce and more grated Parmesan.",
      "temperatures": [],
      "ingredientUses": [
        {
          "note": null,
          "unit": null,
          "quantity": null,
          "ingredientId": "ing8"
        }
      ]
    }
  ],
  "times": {
    "cook": null,
    "prep": null,
    "total": null,
    "inactive": null
  },
  "yield": {
    "text": "Yield:6 servings",
    "unit": null,
    "quantity": null
  },
  "images": [],
  "source": {
    "url": "https://cooking.nytimes.com/recipes/770849339-spinach-meatballs-with-pasta",
    "type": "paste",
    "author": "Ali Slagle",
    "textOrigin": "provided",
    "publication": null,
    "publishedAt": null,
    "originalText": "---\ntitle: \"Spinach Meatballs With Pasta Recipe • 5★ • 1 hr 30 min\"\ntype: source\nstatus: active\nsource: \"https://cooking.nytimes.com/recipes/770849339-spinach-meatballs-with-pasta\"\nauthor:\n- \"[[Ali Slagle]]\"\npublished: 2026-02-11\ncreated: 2026-06-20\ndescription: \"Adding frozen, chopped spinach to your meatballs to “stretch” the meat further isn’t just kind to your pocket book — it also makes for a better meatball. The spinach brings moisture to the mix of beef and pork, which leads to a more tender and juicy meatball.\"\ntags:\n---\n- Christopher Testani for The New York Times. Food Stylist: Monica Pierini.\nAdding frozen, chopped spinach to your meatballs to “stretch” the meat further isn’t just kind to your pocket book — it also makes for a better meatball. The spinach brings moisture to the mix of beef and pork, which leads to a more tender and juicy meatball. (You can also exclusively use pork or beef if you prefer.) The spinach also accentuates the minerality of the iron-rich ground beef, adding savoriness without heaviness. This recipe has you brown the meatballs in a pot so that you can build the sauce with the flavorful drippings. If you’d prefer to cook the meatballs in the oven, roast them on the upper rack at 425 degrees until no longer pink, 11 to 14 minutes, then broil until golden-brown on top, 2 to 4 minutes before adding to the sauce. Be sure to scrape any drippings from the sheet pan into the sauce as well.\n- Saved\n- Give\n---\n## Ingredients\nYield:6 servings\n- 1 (10-ounce) package frozen chopped spinach, thawed, squeezed dry, liquid reserved\n- ¾ cup panko bread crumbs\n- 1 large egg\n- 5 garlic cloves, finely chopped, divided\n- Salt and black pepper\n- 8 ounces ground beef (15- to 20-percent fat)\n- 8 ounces ground pork\n- ½ cup finely grated Parmesan (about 1½ ounces), plus more for serving\n- ¼ cup finely chopped parsley or basil, plus a few sprigs\n- 3 tablespoons extra-virgin olive oil, plus more for rolling\n- 2 (28-ounce) cans crushed tomatoes\n- 1 pound spaghetti, rigatoni or another long or tubed noodle\n[Ingredient Substitution Guide](https://cooking.nytimes.com/article/ingredient-substitutions)\n## Preparation\n1. Step 1\nIn a large bowl, stir together the spinach, ½ cup of the spinach liquid, panko, egg, 1 teaspoon chopped garlic, 1 teaspoon Diamond Crystal kosher salt (or ½ teaspoon coarse kosher salt) and a few grinds of pepper. Let sit for 5 minutes, until the panko is softened.\n2. 1. Step 2\nAdd the beef, pork, Parmesan and parsley. Mix with your hands until just combined, avoiding overmixing. Using oiled hands, roll the mixture into 18 balls (each about 2 heaping tablespoons, about 50 grams each) and place on a plate or sheet pan as you go. If the meat is soft and not holding its shape, refrigerate for 5 to 10 minutes to firm.\n3. 1. Step 3\nIn a large Dutch oven or heavy-bottomed pot, heat the oil over medium. Working in batches to avoid crowding, add the meatballs and cook until browned on two sides, 3 to 6 minutes per side. Return to the plate and repeat with the remaining meatballs. (They will not be cooked through yet.)\n4. 1. Step 4\nWithout cleaning the pot, reduce heat to medium-low and add the remaining garlic. Stir to coat in the fat, then carefully add the crushed tomatoes, the herb sprigs and a pinch of salt. Scrape up the stuck-on browned bits. Once gently simmering, add the meatballs and any drippings from the plate. Cook, flipping the meatballs occasionally, until the meatballs are cooked through and the sauce is rich, 20 to 25 minutes. Turn off the heat.\n5. 1. Step 5\nWhile the meatballs are simmering, bring a large pot of salted water to a boil. When the meatballs are done, add the pasta to the water and cook until al dente according to package directions. Reserve 1 ½ cups pasta water, then drain and return the pasta to the pot.\n6. 1. Step 6\nAdd about 1 cup of the tomato sauce to the pasta, along with ½ cup pasta water. Toss over medium-high until the pasta is glossed in sauce; add more sauce and pasta water as needed until lightly coated. Serve the pasta topped with the meatballs, more sauce and more grated Parmesan."
  },
  "cuisines": [],
  "keywords": [],
  "language": null,
  "warnings": [
    {
      "id": "warn1",
      "code": "UNKNOWN_QUANTITY",
      "path": "/ingredients/4/quantity",
      "message": "No clear quantity was found in this source line.",
      "severity": "warning",
      "resolution": "accepted_unknown",
      "reviewNote": "Accepted in review: describes the source as written.",
      "sourceExcerpt": "- Salt and black pepper"
    },
    {
      "id": "warn2",
      "code": "AMBIGUOUS_UNIT",
      "path": "/ingredients/5/unit",
      "message": "Ounces may mean mass or fluid volume. Check the original.",
      "severity": "warning",
      "resolution": "corrected",
      "reviewNote": "Confirmed: weight ounces (Jev suggested, 1.00)",
      "sourceExcerpt": "- 8 ounces ground beef (15- to 20-percent fat)"
    },
    {
      "id": "warn3",
      "code": "AMBIGUOUS_UNIT",
      "path": "/ingredients/6/unit",
      "message": "Ounces may mean mass or fluid volume. Check the original.",
      "severity": "warning",
      "resolution": "corrected",
      "reviewNote": "Confirmed: weight ounces (Jev suggested, 1.00)",
      "sourceExcerpt": "- 8 ounces ground pork"
    },
    {
      "id": "warn4",
      "code": "OTHER",
      "path": "/source/originalText",
      "message": "Some source lines were not assigned to recipe fields. Check the original for omissions.",
      "severity": "warning",
      "resolution": "accepted_unknown",
      "reviewNote": "Accepted in review: describes the source as written.",
      "sourceExcerpt": null
    },
    {
      "id": "warn5",
      "code": "UNCONFIRMED_DEPENDENCY",
      "path": "/steps",
      "message": "The ingredient links and step order were suggested by Jev. Check them in the recipe table.",
      "severity": "info",
      "resolution": "unreviewed",
      "reviewNote": null,
      "sourceExcerpt": null
    }
  ],
  "equipment": [],
  "categories": [],
  "components": [],
  "difficulty": null,
  "provenance": {
    "method": "ai",
    "aiModel": "jev-1.13.0+gemini-3.8-flash",
    "evidence": [
      {
        "path": "/ingredients/0/originalText",
        "basis": "deterministic",
        "excerpt": "- 1 (10-ounce) package frozen chopped spinach, thawed, squeezed dry, liquid reserved",
        "sourceLocator": "ingredient line 1"
      },
      {
        "path": "/ingredients/1/originalText",
        "basis": "deterministic",
        "excerpt": "- ¾ cup panko bread crumbs",
        "sourceLocator": "ingredient line 2"
      },
      {
        "path": "/ingredients/2/originalText",
        "basis": "deterministic",
        "excerpt": "- 1 large egg",
        "sourceLocator": "ingredient line 3"
      },
      {
        "path": "/ingredients/3/originalText",
        "basis": "deterministic",
        "excerpt": "- 5 garlic cloves, finely chopped, divided",
        "sourceLocator": "ingredient line 4"
      },
      {
        "path": "/ingredients/4/originalText",
        "basis": "deterministic",
        "excerpt": "- Salt and black pepper",
        "sourceLocator": "ingredient line 5"
      },
      {
        "path": "/ingredients/5/originalText",
        "basis": "deterministic",
        "excerpt": "- 8 ounces ground beef (15- to 20-percent fat)",
        "sourceLocator": "ingredient line 6"
      },
      {
        "path": "/ingredients/6/originalText",
        "basis": "deterministic",
        "excerpt": "- 8 ounces ground pork",
        "sourceLocator": "ingredient line 7"
      },
      {
        "path": "/ingredients/7/originalText",
        "basis": "deterministic",
        "excerpt": "- ½ cup finely grated Parmesan (about 1½ ounces), plus more for serving",
        "sourceLocator": "ingredient line 8"
      },
      {
        "path": "/ingredients/8/originalText",
        "basis": "deterministic",
        "excerpt": "- ¼ cup finely chopped parsley or basil, plus a few sprigs",
        "sourceLocator": "ingredient line 9"
      },
      {
        "path": "/ingredients/9/originalText",
        "basis": "deterministic",
        "excerpt": "- 3 tablespoons extra-virgin olive oil, plus more for rolling",
        "sourceLocator": "ingredient line 10"
      },
      {
        "path": "/ingredients/10/originalText",
        "basis": "deterministic",
        "excerpt": "- 2 (28-ounce) cans crushed tomatoes",
        "sourceLocator": "ingredient line 11"
      },
      {
        "path": "/ingredients/11/originalText",
        "basis": "deterministic",
        "excerpt": "- 1 pound spaghetti, rigatoni or another long or tubed noodle",
        "sourceLocator": "ingredient line 12"
      },
      {
        "path": "/steps/0/originalText",
        "basis": "deterministic",
        "excerpt": "In a large bowl, stir together the spinach, ½ cup of the spinach liquid, panko, egg, 1 teaspoon chopped garlic, 1 teaspoon Diamond Crystal kosher salt (or ½ teaspoon coarse kosher salt) and a few grinds of pepper. Let sit for 5 minutes, until the panko is softened.",
        "sourceLocator": "instruction line 1"
      },
      {
        "path": "/steps/1/originalText",
        "basis": "deterministic",
        "excerpt": "Add the beef, pork, Parmesan and parsley. Mix with your hands until just combined, avoiding overmixing. Using oiled hands, roll the mixture into 18 balls (each about 2 heaping tablespoons, about 50 grams each) and place on a plate or sheet pan as you go. If the meat is soft and not holding its shape, refrigerate for 5 to 10 minutes to firm.",
        "sourceLocator": "instruction line 2"
      },
      {
        "path": "/steps/2/originalText",
        "basis": "deterministic",
        "excerpt": "In a large Dutch oven or heavy-bottomed pot, heat the oil over medium. Working in batches to avoid crowding, add the meatballs and cook until browned on two sides, 3 to 6 minutes per side. Return to the plate and repeat with the remaining meatballs. (They will not be cooked through yet.)",
        "sourceLocator": "instruction line 3"
      },
      {
        "path": "/steps/3/originalText",
        "basis": "deterministic",
        "excerpt": "Without cleaning the pot, reduce heat to medium-low and add the remaining garlic. Stir to coat in the fat, then carefully add the crushed tomatoes, the herb sprigs and a pinch of salt. Scrape up the stuck-on browned bits. Once gently simmering, add the meatballs and any drippings from the plate. Cook, flipping the meatballs occasionally, until the meatballs are cooked through and the sauce is rich, 20 to 25 minutes. Turn off the heat.",
        "sourceLocator": "instruction line 4"
      },
      {
        "path": "/steps/4/originalText",
        "basis": "deterministic",
        "excerpt": "While the meatballs are simmering, bring a large pot of salted water to a boil. When the meatballs are done, add the pasta to the water and cook until al dente according to package directions. Reserve 1 ½ cups pasta water, then drain and return the pasta to the pot.",
        "sourceLocator": "instruction line 5"
      },
      {
        "path": "/steps/5/originalText",
        "basis": "deterministic",
        "excerpt": "Add about 1 cup of the tomato sauce to the pasta, along with ½ cup pasta water. Toss over medium-high until the pasta is glossed in sauce; add more sauce and pasta water as needed until lightly coated. Serve the pasta topped with the meatballs, more sauce and more grated Parmesan.",
        "sourceLocator": "instruction line 6"
      }
    ],
    "ocrEngine": null,
    "importedAt": "2026-10-04T00:45:46.123Z",
    "promptVersion": "recipe-lab-overseer/1.0.0",
    "importerVersion": "deterministic/1.0.0"
  },
  "description": "Adding frozen, chopped spinach to your meatballs to “stretch” the meat further isn’t just kind to your pocket book — it also makes for a better meatball. The spinach brings moisture to the mix of beef and pork, which leads to a more tender and juicy meatball. (You can also exclusively use pork or beef if you prefer.) The spinach also accentuates the minerality of the iron-rich ground beef, adding savoriness without heaviness. This recipe has you brown the meatballs in a pot so that you can build the sauce with the flavorful drippings. If you’d prefer to cook the meatballs in the oven, roast them on the upper rack at 425 degrees until no longer pink, 11 to 14 minutes, then broil until golden-brown on top, 2 to 4 minutes before adding to the sauce. Be sure to scrape any drippings from the sheet pan into the sauce as well.",
  "ingredients": [
    {
      "id": "ing1",
      "name": "(10-ounce) package frozen chopped spinach",
      "note": null,
      "unit": null,
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "1",
        "value": {
          "numerator": 1,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": "thawed, squeezed dry, liquid reserved",
      "alternatives": [],
      "originalText": "- 1 (10-ounce) package frozen chopped spinach, thawed, squeezed dry, liquid reserved"
    },
    {
      "id": "ing2",
      "name": "panko bread crumbs",
      "note": null,
      "unit": {
        "code": "cup",
        "label": "cup",
        "system": "unknown"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "¾",
        "value": {
          "numerator": 3,
          "denominator": 4
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- ¾ cup panko bread crumbs"
    },
    {
      "id": "ing3",
      "name": "large egg",
      "note": null,
      "unit": null,
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "1",
        "value": {
          "numerator": 1,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- 1 large egg"
    },
    {
      "id": "ing4",
      "name": "garlic cloves",
      "note": null,
      "unit": null,
      "divided": true,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "5",
        "value": {
          "numerator": 5,
          "denominator": 1
        }
      },
      "modifiers": [
        "divided"
      ],
      "equivalents": [],
      "packageSize": null,
      "preparation": "finely chopped",
      "alternatives": [],
      "originalText": "- 5 garlic cloves, finely chopped, divided"
    },
    {
      "id": "ing5",
      "name": "Salt and black pepper",
      "note": null,
      "unit": null,
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "unknown",
        "text": null,
        "value": null
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- Salt and black pepper"
    },
    {
      "id": "ing6",
      "name": "ground beef (15- to 20-percent fat)",
      "note": null,
      "unit": {
        "code": "oz",
        "label": "ounces",
        "system": "us_customary"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "8",
        "value": {
          "numerator": 8,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- 8 ounces ground beef (15- to 20-percent fat)"
    },
    {
      "id": "ing7",
      "name": "ground pork",
      "note": null,
      "unit": {
        "code": "oz",
        "label": "ounces",
        "system": "us_customary"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "8",
        "value": {
          "numerator": 8,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- 8 ounces ground pork"
    },
    {
      "id": "ing8",
      "name": "finely grated Parmesan (about 1½ ounces)",
      "note": null,
      "unit": {
        "code": "cup",
        "label": "cup",
        "system": "unknown"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "½",
        "value": {
          "numerator": 1,
          "denominator": 2
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": "plus more for serving",
      "alternatives": [],
      "originalText": "- ½ cup finely grated Parmesan (about 1½ ounces), plus more for serving"
    },
    {
      "id": "ing9",
      "name": "parsley",
      "note": null,
      "unit": {
        "code": "cup",
        "label": "cup",
        "system": "unknown"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "¼",
        "value": {
          "numerator": 1,
          "denominator": 4
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": "finely chopped",
      "alternatives": [
        "basil, plus a few sprigs"
      ],
      "originalText": "- ¼ cup finely chopped parsley or basil, plus a few sprigs"
    },
    {
      "id": "ing10",
      "name": "extra-virgin olive oil",
      "note": null,
      "unit": {
        "code": "tbsp",
        "label": "tablespoons",
        "system": "unknown"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "3",
        "value": {
          "numerator": 3,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": "plus more for rolling",
      "alternatives": [],
      "originalText": "- 3 tablespoons extra-virgin olive oil, plus more for rolling"
    },
    {
      "id": "ing11",
      "name": "(28-ounce) cans crushed tomatoes",
      "note": null,
      "unit": null,
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "2",
        "value": {
          "numerator": 2,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": null,
      "alternatives": [],
      "originalText": "- 2 (28-ounce) cans crushed tomatoes"
    },
    {
      "id": "ing12",
      "name": "spaghetti",
      "note": null,
      "unit": {
        "code": "lb",
        "label": "pound",
        "system": "unknown"
      },
      "divided": null,
      "optional": null,
      "quantity": {
        "max": null,
        "kind": "exact",
        "text": "1",
        "value": {
          "numerator": 1,
          "denominator": 1
        }
      },
      "modifiers": [],
      "equivalents": [],
      "packageSize": null,
      "preparation": "rigatoni",
      "alternatives": [
        "another long or tubed noodle"
      ],
      "originalText": "- 1 pound spaghetti, rigatoni or another long or tubed noodle"
    }
  ],
  "ingredientGroups": [
    {
      "id": "ig1",
      "title": null,
      "componentId": null,
      "ingredientIds": [
        "ing1",
        "ing2",
        "ing3",
        "ing4",
        "ing5",
        "ing6",
        "ing7",
        "ing8",
        "ing9",
        "ing10",
        "ing11",
        "ing12"
      ]
    }
  ],
  "instructionGroups": [
    {
      "id": "sg2",
      "title": "Step 1",
      "stepIds": [
        "step1"
      ],
      "componentId": null
    },
    {
      "id": "sg3",
      "title": "1. Step 2",
      "stepIds": [
        "step2"
      ],
      "componentId": null
    },
    {
      "id": "sg4",
      "title": "1. Step 3",
      "stepIds": [
        "step3"
      ],
      "componentId": null
    },
    {
      "id": "sg5",
      "title": "1. Step 4",
      "stepIds": [
        "step4"
      ],
      "componentId": null
    },
    {
      "id": "sg6",
      "title": "1. Step 5",
      "stepIds": [
        "step5"
      ],
      "componentId": null
    },
    {
      "id": "sg7",
      "title": "1. Step 6",
      "stepIds": [
        "step6"
      ],
      "componentId": null
    }
  ]
}
