In a large pot, cook the entire box of shells in salted water according to package instructions until al dente. Be careful not to overcook shells so they do not break apart.
While the shells are cooking, heat olive oil in a large pan or skillet over medium high heat (only use 1 tablespoon if using ground beef). Add the ground meat and brown for 2-3 minutes. Add the chopped onions, garlic, diced tomatoes, Italian seasoning and salt and pepper to taste. Simmer for 2-3 minutes then add the spinach and simmer for 2 more minutes until spinach is wilted and meat is cooked through. Taste meat mixture and add more salt and pepper to taste if needed. Remove meat mixture from heat and mix in ricotta cheese and egg until fully incorporated.
Pour a half cup of marinara sauce into the bottom of a 12-inch cast iron skillet or a 9x13 baking dish and spread out with the back of a large spoon. Once the shells are cooked, stuff shells with about a tablespoon and a half of meat mixture each and arrange them in your skillet or baking dish. Pour the marinara sauce over the top, sprinkle with mozzarella cheese and Parmesan cheese. Sprinkle a little Italian seasoning and cracked black pepper over top of cheese then bake for 35-45 minutes until cheese is golden and bubbly.
Allow cooked shells to cool for about 10 minutes, top with fresh basil if desired and enjoy!
leftovers can be stored in an airtight container in the refrigerator for up to 3 days.