Heat the olive oil in a large pot or Dutch oven over medium heat.
Add the diced onion and sauté for about 5 minutes, until translucent.
Add the minced garlic and cook for 1 more minute, stirring constantly to avoid burning.
Increase the heat to medium-high and add the ground beef. Cook until browned, breaking it apart with a wooden spoon (around 8-10 minutes).
Drain excess fat if necessary, then add the chili powder, cumin, paprika, cayenne pepper, salt, and pepper. Stir well to coat the meat and onions with the spices.
Pour in the crushed tomatoes and beef broth. Bring the mixture to a simmer, stirring occasionally.
Add the kidney beans and black beans, stirring to combine.
Reduce the heat to low, cover the pot, and let the chili simmer for at least 60 minutes. Stir occasionally, and adjust seasoning as needed.
Serve hot with optional toppings such as shredded cheese, chopped green onions, or sour cream.