Heat 2 tablespoons of olive oil in a large Dutch oven or braiser over medium heat. Add the diced onion and cook, stirring occasionally, until deeply golden, 10 to 15 minutes.
Transfer the onion to a mixing bowl. Add the ground beef, zucchini, breadcrumbs, parsley, cilantro, egg, paprika, turmeric, salt, pepper, cumin and cinnamon. Mix until combined, then shape into 16 to 20 slightly flattened meatballs.
In a small bowl, whisk together the tomato sauce or grated tomatoes, date syrup, paprika, salt, black pepper and turmeric.
Heat the remaining olive oil in the same pot over medium heat. Add the sliced onion and cook, stirring occasionally, until softened, 5 to 6 minutes.
Arrange the meatballs over the onions, then tuck the potatoes between them. Pour the tomato mixture and water over the top, followed by the remaining date syrup.
Cover and bring to a boil. Reduce the heat to low and simmer until the potatoes are tender and the meatballs are cooked through, about 60 minutes. If the sauce is thin, uncover and simmer for up to 20 minutes longer.
For browned tops, place the uncovered pot under the broiler for about 3 minutes, watching closely. Sprinkle with parsley and serve warm.