The Census Geocoder can perform this lookup. This service also has an API that you can use. The documentation (PDF) might be helpful. For example, this query:
http://geocoding.geo.census.gov/geocoder/geographies/address?street=740+Park+Avenue&city=New+York+City&state=NY&benchmark=Public_AR_Census2010&vintage=Census2010_Census2010&layers=14&format=json
returns
{
"result":{
"input":{
"address":{
"street":"740 Park Avenue",
"city":"New York City",
"state":"NY"
},
"benchmark":{
"id":"9",
"benchmarkName":"Public_AR_Census2010",
"benchmarkDescription":"Public Address Ranges - Census 2010 Benchmark",
"isDefault":false
},
"vintage":{
"id":"910",
"vintageName":"Census2010_Census2010",
"vintageDescription":"Census2010 Vintage - Census2010 Benchmark",
"isDefault":true
}
},
"addressMatches":[
{
"matchedAddress":"740 Park Ave, NEW YORK, NY, 10021",
"coordinates":{
"x":-73.96422,
"y":40.770588
},
"tigerLine":{
"tigerLineId":"59657379",
"side":"L"
},
"addressComponents":{
"fromAddress":"736",
"toAddress":"756",
"preQualifier":"",
"preDirection":"",
"preType":"",
"streetName":"Park",
"suffixType":"Ave",
"suffixDirection":"",
"suffixQualifier":"",
"city":"NEW YORK",
"state":"NY",
"zip":"10021"
},
"geographies":{
"Census Blocks":[
{
"BLKGRP":"2",
"UR":"",
"OID":210403969807785,
"FUNCSTAT":"S",
"STATE":"36",
"AREAWATER":0,
"NAME":"Block 2002",
"SUFFIX":"",
"LSADC":"BK",
"CENTLON":"-073.9648786",
"HU100":198,
"LWBLKTYP":"L",
"BLOCK":"2002",
"BASENAME":"2002",
"INTPTLAT":"+40.7711022",
"POP100":375,
"MTFCC":"G5040",
"COUNTY":"061",
"GEOID":"360610130002002",
"CENTLAT":"+40.7711022",
"INTPTLON":"-073.9648786",
"AREALAND":13468,
"OBJECTID":6660907,
"TRACT":"013000"
}
]
}
}
]
}
}