In a large pot or Dutch oven, heat olive oil over medium-high heat. Add ground beef and cook, breaking it up with a spoon, until browned. Drain off any excess grease.
Add chopped onion and minced garlic to the pot. Cook until softened, about 5 minutes.
Stir in chili powder, cumin, smoked paprika, and cayenne pepper (if using). Cook for 1 minute, stirring constantly, until fragrant.
Add diced tomatoes (with their juices), kidney beans, pinto beans, and beef broth to the pot. Bring to a simmer.
Reduce heat to low, cover, and simmer for at least 1 hour, or up to 3 hours, stirring occasionally. The longer it simmers, the more the flavors will meld.
Season with salt and pepper to taste. Serve hot with your favorite toppings, such as shredded cheese, sour cream, or green onions.
Notes
For a richer flavor, consider adding a tablespoon of tomato paste or a square of dark chocolate during the simmering process. Leftovers can be stored in the refrigerator for up to 3 days or frozen for later use.