If you use Asterisk and FreePBX (though likely easily converted to other interfaces if desired), Ward Mundy at NerdVittles wrote a great CallerID lookup script for the US market. 

For us in Canada, I've added Canada411 Personal and Business lookups too.

And to the title of the article, the real reason for the post, are you sick of Telemarketers (or other types of identified calls such as Non-Profits, Fax Machines, Political or Collection Agencies), then I have just the thing for you.  800notes.com provides a great lookup as well as several sister companies that seem to share the same data.  Given the popularity of the site, it has been very successful for me over the past year, so much so that 4 telemarketers managed to get through out of the 10 recorded daily on my asterisk box.  Now that they're identified, you can choose how to handle them.  I actually dump them to a separate voicemail called Junk.  I then email them to myself.  Don't even store them.  In a year, I've actually had upwards of a dozen (charities) leave me a message.  The rest, no wasted time since in email, I can see it's typically a sub 5 second message so i delete it immediately – Telemarketers on my terms…

The other nice feature, if it doesn't find the callerid info, it will at least return the city and province (state or country) of the caller id, since I'm not that good at memorizing 900 area codes never mind the 990 city codes within them. 

Caller ID Lookup Source 

To use the file, "tar -zxf lookupcid.tar" and move the 800notes.php and callerid.php to your web directory.  You may want to consider what sources you want to do lookups against, Canada411, 800Notes, Google and AnyWho.  Each adds 2-3 seconds to the search time.   Now configure your FreePBX CID lookup to use that script.  Here's the settings I use:

Create a new callerid lookup source, type "http" and host to "localhost", path to "/callerid.php" and finally query to "thenumber=[NUMBER]&thename=${URIENCODE(${CALLERID(name)})}"

The last file in there is the portion of my extension_custom.conf that handles my house calling.  Incoming lines ring 600, a custom extension.  601 is the all house phones ring group, 599 is my personal ring group, all house phones and my cell phones, 699 is ring group that doesn't ring any upstairs phones or kitchen (bed and dinner hours) which I may want to answer…not likely…but possibly and lastly, 609 is the dead extension simply to handle junk calls that doesn't ring any phones.

Drop me a message at the contact me page if you have questions.  Enjoy.