Heat the oil. Warm olive oil in a large skillet or Dutch oven over medium heat until it shimmers but doesn't smoke — about 30 seconds.
Cook the aromatics. Add the diced onion and cook, stirring occasionally, until soft and translucent (about 5 minutes). The edges should start to turn golden. Stir in garlic, cumin, paprika, chili powder, cayenne, salt, and pepper. Cook for another minute until fragrant — if it smells nutty and warm, you're good.
Build the sauce. Add the drained beans, diced tomatoes with their liquid, tomato paste, and broth to the skillet. Stir well to combine everything, scraping up any browned bits from the bottom of the pan.
Simmer until thickened. Bring to a gentle simmer, then reduce heat to low. Cook uncovered for 20 minutes, stirring occasionally. The sauce should thicken enough that when you run your spoon through it, it leaves a visible trail. If it looks dry halfway through, add another splash of broth or water.
Finish and serve. Remove from heat and stir in the lemon juice — taste before adding this; you want brightness without overpowering the beans. Serve with crusty bread, over rice, or alongside roasted chicken. Garnish with fresh parsley if you have it.