I always try "soda water" (baking soda mixed with water) on any stain (carpet, upholstery, etc.) before I go out and spend money on one of those spot stain removers. So you might try taking about a tablespoon or so of baking soda to a cup or a cup and a half of warm water, mixing it well and then using a clean cloth (NOT paper towel - something like wash rag, cloth diaper, etc.), cover your finger with the cloth, dip it in the baking soda water and then blot the stains SEVERAL times. Then repeat the dip and blot process a few times as well. You may have to wait for the spot to dry to be able to tell if the stain is gone depending on the fabric.
So far, that's the only method I've ever had to use to get a stain off of our couches. I'm pretty diligent about treating the stains right away though so I don't know about set in stains. That may take something chemical.
Oh, and one more thing, I've had great luck getting stains out of clothes and carpet with baby wipes. I know, baby wipes. Weird huhn? But I got a stain out of my mom's shorts at 6-flags and poop and other stains out of the carpet in our family room with them as well.
Good luck!