Methodology
WalletShock shows what everyday goods cost in a reader's own area, how much those prices have changed, what electricity and gasoline cost there, whether data centers are nearby, and how the local school district's spending has moved, and it places those facts next to the federal lobbying of the industries that sell those goods.
WalletShock shows lobbying activity alongside price changes. It does not assert that one caused the other. No sentence on the site, in an export or in a summary uses a causal verb linking the two.
How a location becomes a set of data areas
A street address or a pair of coordinates is sent to the U.S. Census Bureau Geocoder, which returns the state, county, incorporated place, 119th Congress congressional district and unified school district. No key is used and nothing is stored about the reader. Each data layer is then resolved to the finest area that publishes it, and every number carries a label naming that area.
- Consumer prices. The county is mapped to its Core Based Statistical Area through the Census Bureau's July 2023 delineation file. If that area is one of the 23 metropolitan areas for which the Bureau of Labor Statistics publishes the Consumer Price Index, the metro series is used. Otherwise the Census division is used, then the region, then the U.S. city average. The same ladder is walked per item, because BLS publishes many detailed items (eggs, milk, ground beef and most food) only nationally, while it publishes gasoline, electricity, natural gas, rent, cars, car insurance, apparel and restaurant meals for every metro. Average dollar prices are shown where BLS publishes them: food items for the nation and four regions, energy items for all 37 areas.
- Per-timescale choice. For each timescale (1, 2, 3, 5 or 10 years) the finest published series that reaches back far enough is used, so a metro series that began recently can answer the 1-year view while the national series answers the 10-year view. The label says which series produced the change. A series whose latest month is more than 15 months behind the freshest series for that item is treated as discontinued and the label says when it stopped.
- Gaps. BLS publishes New York, Los Angeles and Chicago monthly and the other twenty metros in alternating months. Charts draw unpublished months as breaks and count them; nothing is interpolated. Percent changes compare the latest month with the same month N years earlier, or the nearest published month within two months, and say so.
- Electricity. The utility serving the county comes from the Energy Information Administration's Form EIA-861 service territory file, ranked by residential customers across the sales and delivery-company files. Its average residential price is bundled revenue divided by sales for the data year. Where the utility only delivers power and competitive retailers set the price, as in most of Texas, the state average is shown and the label says so. The trend line is the EIA monthly statewide residential average.
- Gasoline. The BLS metro average price for regular gasoline where published; otherwise the EIA weekly series for the city, then the state, then the Petroleum Administration for Defense District, then the U.S.
- School spending. The unified school district returned by the geocoder is joined by its NCES identifier to the Census Bureau's Annual Survey of School System Finances, fiscal years 2013 onward. Current spending per pupil is compared with the all-items Consumer Price Index for the area's finest published level, matching each fiscal year to its closing month of June. Figures are as published and not adjusted for inflation; a reported figure under $1,000 per pupil is treated as not reported and the panel says how many years were skipped.
- Data centers. Facilities within 25 miles of the reader's point, measured on the earth's surface with PostGIS, plus every facility FracTracker places in the same county. Data provided by FracTracker Alliance (2026). Accessed via https://www.fractracker.org/data-centers/. Status, size, operator and community pushback fields are FracTracker's own and carry its location confidence rating.
- ZIP codes, cities and counties. Typed into the picker, these resolve to the geographic center of the ZIP code tabulation area, place or county from the Census Bureau's 2024 gazetteer files, and the report is built for that point. The label names the ZIP, city or county that was looked up.
- Congressional districts. A district code such as TX-33 resolves every county that intersects the district, from the Census Bureau's 2020 district-to-county relationship file, and reports the price area (CPI metro, else division) covering the largest share of the district, listing the others with their shares. Shares are by population from the American Community Survey where the Census API key is configured, otherwise by land area, and the page says which. Energy, data centers and school spending are shown for the district's central point, because those layers need a concrete place.
- Lobbying. Filings with the Senate Office of Public Records under the Lobbying Disclosure Act are fetched from the LDA REST API. The API offers no filter by issue code, so every filing for the last five years is retrieved and each filing's general issue codes are recorded. For each basket item, the panel shows the top ten clients by number of filings carrying that item's issue codes in the latest full year, and the clients whose names match a curated list for the industry. Name matching is imperfect: subsidiaries file under other names, the same organisation can appear under several registrants and is merged by exact name, and the industry list is reviewed by a person before launch. Counts are filings, not lobbyists or dollars; amounts are the income registrants reported for the client plus the expenses self-filers reported. Lobbying is federal and the same for every area.
- Money-flow links. Where an LDA client name matches an entity on purchasingpolicy.org exactly or after removing corporate suffixes, a link to that entity's donor and PAC network is shown. The match is cached; the public site never calls purchasingpolicy.org, and a missing match hides the link without affecting anything else.
Prices reported by shoppers
No federal agency publishes a price for an individual shop. Readers can report what they paid, and where enough of them agree the result is shown beside the official figure as a community-reported price. It is never merged into a government series, never averaged with one, and always carries its own label.
- The rule. For one catalog item at one store, within a window of 14 days ending on the most recent report, at least three independent reports must exist and every one of them must sit within ten percent of their median. The median is then published with the number of reports, the window and the store. If any report falls outside that band, nothing is published.
- Independence. Each report carries a one-way code derived from the account that sent it, or for a signed-out reader from a random browser identifier combined with a hashed network address. Two reports count as independent only when their codes differ, so one person cannot become three shoppers. The newest report from each code is the one that counts.
- Units. Every item has a unit, such as per dozen, per pound, per gallon or per kilowatt-hour. A reported price and quantity are converted to that unit before anything is compared, so a two-dozen box and a single dozen produce the same figure.
- Implausible figures. Where the Bureau of Labor Statistics publishes an average price for the item in that area in the same unit, a report above three times or below a third of it is held for review by a person instead of counting toward agreement. So is any report more than ten percent away from a store's established median.
- Photographs. A receipt or shelf price tag is read by an automated service to suggest what it says. That reading is a suggestion only: a person confirms every figure before it becomes a report, and both the raw reading and the confirmed values are kept. Photographs are deleted after 90 days.
- Where. A reader's position places the store; stores within 150 metres of each other with the same name are treated as one. Personal mode shows community prices from stores within 25 miles.
The embeddable widget
Any site may carry the widget. It applies the same resolution rules as the rest of WalletShock, and the same citation requirements.
- Where the visitor is. The loader asks WalletShock which county the visitor's network address falls in, using the geolocation our host derives from that address, or its postal code where the position is unknown. That request is never cached and nothing about it is stored. A host may instead pin every reader to one county or ZIP code.
- When the location is unknown. A network address that resolves to no United States county, or a host that pins nothing, produces the U.S. city average, and the widget says so on each row: “Your location could not be determined, so national figures are shown”.
- Caching. The widget's content depends only on the county, items, timescale and theme in its address, never on who is asking, so it is cached for a day at the edge. The location lookup, which does depend on the visitor, is never cached.
- Data centers. The count is of FracTracker facilities within 25 miles of the centre of the county, and the citation and link to FracTracker Alliance appear inside the widget itself.
The Texas pages
Every Texas county page (walletshock.org/tx) starts with the area report above, built for the county's geographic center point from the Census Bureau's gazetteer, and adds what the state and the county have on record. The same rules hold: no sentence joins a payment to a decision or a decision to a price with a causal verb, in English or in Spanish; every figure names its source and the area it describes; the public site never calls an agency at request time.
- Resolution. A county page answers to its name (/tx/hood) or its five-digit FIPS code. The delivery company for electricity is the one the Energy Information Administration's Form EIA-861 service territory file lists for the county with the most residential customers statewide; the others are named. Retail offers are Power to Choose's listings for that company; delivery charges are the Public Utility Commission's rate reports. Electricity prices from EIA are statewide and are compared only with the same month of an earlier year. Grid figures from ERCOT are statewide or by load zone, never by county. Water use is the Texas Water Development Board's county estimate; the groundwater conservation district is the one containing the county's center point in the Board's boundary file. The Attorney General request, its status and the reported gifts are shown on every county page because an opinion would apply to every county with the same authority.
- Curated records. Records no agency publishes as data (a commissioners court vote, a reported water figure, a gift named in an article, a court's published addresses) live in files in the site's public source code, one per subject. Every entry carries its source title and URL, the date, one plain summary sentence, and the initials of the person who last opened the source and checked the entry; entries marked CC were written by an automated assistant and await that check. A weekly job opens every source URL and files an issue for any that no longer answers; a publisher that refuses automated visitors is listed for a person to open by hand. An entry whose source names only a weekday carries the article's date and says so. A page checked for a water figure that gave none is logged with its URL and shown as such, never as a figure.
- Money by name, and its limits. Gifts from Ethics Commission and Federal Election Commission filings are matched to a list of data center companies and executives by donor name and employer; lobby registrations by client name; tax abatements by property owner against the Comptroller's data center registry and FracTracker's Texas facilities. Every match is a sample, not a tally: a name can match a different person or company, and a donor can give under a name not on the list. Each match stays labelled “awaiting review” until a person confirms or rejects it in the review files, and the pages say how many names are still pending. The FEC totals grow as the nightly job pages through each committee's receipts and say when a committee is incomplete. The reported total from NOTUS is quoted as reported, not recomputed.
- Your bill. On the bill page a photograph of an electricity bill is read once by an automated service into a few fields, which the reader corrects before anything is computed; the photo is not kept. The reader's cents per kilowatt-hour sits beside EIA's statewide average for the same month in earlier years, labelled “as read from your bill”. A reader may add the figure, without their name, to a community row for their delivery company and month, published only when three independent readers agree within ten percent of their median, the same rule as community prices.
- Letters and the flyer. The letter to a commissioners court is written from the page's own figures with their sources, in the reader's name, and asks two questions; the count on the page is of letters the campaign service confirms delivered. The printable flyer and the citizen card arrange the same figures in four movements: what you pay, what was decided, who paid, what you can do. Spanish pages (
?lang=es) carry the same figures and sources; the translation is under review by a fluent speaker until launch, and curated records stay in the language they were recorded in.
Sources and refresh
- Bureau of Labor Statistics Public Data API v2: CPI and average price series, refreshed weekly.
- Energy Information Administration API v2: state electricity prices and weekly gasoline, refreshed weekly; Form EIA-861 files, refreshed each November.
- Census Bureau: Annual Survey of School System Finances individual unit files, checked each spring; Geocoder and CBSA delineation file.
- FracTracker Alliance data centers dataset, imported from the September 2026 export.
- Senate Lobbying Disclosure Act API: filings refreshed daily.
- QPQ Tracker API (purchasingpolicy.org): entity matches refreshed with the lobbying data.
- Prices reported by readers: published as soon as three independent reports agree; photographs read overnight and confirmed by a person.
- Texas: Attorney General status page nightly; Texas Ethics Commission campaign finance and lobby files nightly; FEC receipts nightly; Comptroller abatements, registry and tax rates weekly; Power to Choose daily; Texas Water Development Board estimates as published; curated files as reviewed.
Every panel names its source and the date of the latest observation. The public site reads only from its own database; scheduled jobs fetch from the agencies so visitor traffic never spends their rate limits.
Limits
- No federal agency publishes consumer prices for an individual city, county or district. The metro area is the floor, and outside the 23 metros the division is the honest answer.
- BLS discontinued several metro and division series in recent years, including metro electricity average prices after December 2024; the site falls back and labels it.
- School finance data lag by about two years.
- FracTracker's dataset focuses on proposals and is still adding existing facilities.
- Lobbying counts depend on how filers describe their activities and which names they file under.
- A community-reported price describes one store at one moment, as reported by a handful of shoppers. It is evidence of what people paid, not a statistical average of an area, and it is never treated as one.
WalletShock is a project of the Dekleptocracy Alliance, a Texas 501(c)(4) nonprofit. Money-flow data comes from its QPQ Tracker at purchasingpolicy.org. See also About and Privacy.