Poligraft is a project of Sunlight Labs, the technology arm of the Sunlight Foundation.

Using Poligraft

Our Data

Our data is provided by the Center for Responsive Politics and the National Institute for Money in State Politics.

For more information on how we use this data, see our campaign finance and lobbying methodology pages.

Poligraft is a website and utility that creates an enhanced view of the people, organizations and relationships described within political news stories, blog posts and press releases. To search the underlying records or download the data in bulk, see our companion site Transparency Data.

Poligraft uses Calais for identifying and tagging the people and organizations in all searches performed.

Sunlight makes no guarantee that a John Smith listed in Poligraft results is any given John Smith on a Google search results page, so use the information with caution.


Poligraft is built on the public Transparency Data API. For more information see its API documentation.

Poligraft also has its own built-in API. Specify a URL or text to be processed, and get back the results in JSON format. In fact, every result page in Poligraft has a corresponding JSON representation. Just append a .json to the unique slug, like so.

To process an article, use the /poligraft endpoint in conjunction with a POST or GET request:


Be sure to pass in json=1 or else HTML will be returned, and use url= to pass in a URL or text= to pass in a selection of text. To get back JSONP instead of JSON, append callback=foo to the request, where foo is the name of the desired callback function to wrap the JSON inside. HTTP clients must have redirection enabled, as the response will be a redirect to a slug endpoint like /ABCD.json.

Because Poligraft does processing asynchronously, this endpoint will return a 202 ACCEPTED code until processing is finished, when it returns a 200 OK. In addition to the HTTP response code, there's a top-level field in the JSON called processed which is set to false while processing is active. Poll the endpoint every few seconds until the return code is 200 or the processed value in the JSON is true. Both techniques will work.

Don't want Poligraft to save the text you pass in? Append suppresstext=true.

If you only want to use the API for its text-plucking capabilities, pass in textonly=true. You'll get a response quickly without any influence data -- nothing will be processed asynchronously.

Contact Us

For questions or comments, please use the Feedback link at the bottom of the page.