Heat oil in a large stockpot over medium-high.
Cook onions about 5 minutes until soft; add garlic and cook 1 minute until fragrant.
Add cayenne, chili powder, cumin, paprika, and pepper; stir constantly 1 minute to bloom spices.
Add beef; break up with a wooden spoon and cook 8-10 minutes until fully browned.
Stir in tomato paste; cook 2 minutes.
Stir in tomatoes, beans, broth, and salt until combined.
Boil; reduce heat to low and simmer uncovered 75 minutes, stirring occasionally.
Adjust seasoning; serve with preferred toppings.