Get the record by email
One email when Philadelphia's records change in a way that matters — new dangerous-building cases, tax balances that moved, and what it adds up to. Free.
One email when Philadelphia's records change in a way that matters — new dangerous-building cases, tax balances that moved, and what it adds up to. Free.
Once a week, one email. It carries what actually changed in the city's own records since the last one: new unsafe and imminently dangerous building cases, parcels where the outstanding tax balance moved, and the handful of properties where both are true at once.
I keep an email address and nothing else — no tracking pixels, no click logging, no idea which links you opened. Ask for it to be deleted and it is deleted.
<form class="subscribe" id="sub" novalidate> <label for="email">Your email address</label> <div class="subrow"> <input type="email" id="email" name="email" required autocomplete="email" placeholder="you@example.com"> <button type="submit">Send me the weekly record</button> </div> <input type="text" name="website" id="website" tabindex="-1" autocomplete="off" aria-hidden="true" class="hp"> <p class="subnote" id="subnote" role="status"></p> </form>
<script> (function () { var f = document.getElementById('sub'); if (!f) return; var note = document.getElementById('subnote'); f.addEventListener('submit', function (e) { e.preventDefault(); var email = document.getElementById('email').value.trim(); note.textContent = 'Sending…'; fetch('/api/subscribe', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ email: email, source: 'subscribe-page', website: document.getElementById('website').value }) }).then(function (r) { return r.json().then(function (d) { return {ok: r.ok, d: d}; }); }) .then(function (res) { if (!res.ok) { note.textContent = res.d.error || 'That did not work — try again?'; return; } if (res.d.status === 'confirmed') { note.textContent = 'You are already on the list. Nothing more to do.'; } else { note.textContent = 'Check your inbox — there is a link to confirm, and the list only starts after you click it.'; f.reset(); } }) .catch(function () { note.textContent = 'Network trouble. Try again in a moment.'; }); }); })(); </script>
The confirmation step exists so nobody can sign up an address that is not theirs. Until the link is clicked, nothing is sent.