Community研究與資料分析github.com

2016judea/records-request

透過公開紀錄請求從美國政府機關取得特定文件——「索取評估模型」、「提交資料實務請求」、「提出FOIA」、「公開紀錄請求」、「我們可以直接向縣政府要嗎?」、「該聯絡〈縣名〉的哪個窗口」、「追蹤該請求」、「他們回覆了嗎」。涵蓋先查看網站、找到正確機關與法規、讓請求可被受理而非拒絕的關鍵段落、網路表單陷阱(隱藏字數上限、拒絕撇號的WAF)、追蹤(通常無截止期限)、回覆內容能否再發布,以及解析多年期表格時避免無聲錯誤。

records-request 是什麼?

這項技能(skill)旨在協助使用者透過美國的公開紀錄請求(如FOIA、資料實務請求等),以低成本、高效率的方式從政府機關取得特定文件。其核心理念是「讓請求被受理」,而非被直接拒絕。技能涵蓋完整的操作流程:從Step 0的「先查閱機關網站」開始,避免不必要的請求;Step 1的正確識別機關名稱(例如各州對商業財產評估單位的稱呼完全不同,如Assessor、Appraiser等),並選擇合適的聯繫管道(Email優先、Portal次之、郵寄最後)。Step 2是整個請求的關鍵:必須在信中主動引用並排除相關的保密法規(carve-out paragraph),迫使機關從「能否釋出」轉變為「你要哪份表格」。技能也詳細說明了各州適用的法規條文與對應的免責條款。後續步驟涵蓋了撰寫首次信件的三個必備元素(請求五年資料、提供簡便退場機制、先詢問費用估算)、批次發送前的檢查要點、應對網路表單的兩大陷阱(隱藏字元上限與WAF拒絕撇號)、記錄發送狀態、處理需要附件的回覆、因為通常沒有法定截止期限而必須主動追蹤、判斷取得資料能否再發布(如明尼蘇達州允許,但多數州情況未定),以及最後解析收到的資料時,要快取原始檔案、注意標籤在不同年份間的差異、避免使用正則表達式或模糊比對造成資料錯誤。此技能支援所有美國聯邦與州級政府機關的公開紀錄請求,尤其適合需要大量、跨縣市索取物業估價等公用資料的開發者、研究人員或記者使用。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/records-request

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

公開紀錄請求

目標: 以低成本取得一份指定的文件,且不惹惱日後可能還需要聯絡的機關。完成 = 檔案已存於磁碟、已快取,並記錄其來源與權利狀態——或收到一份書面的「我們沒有該資料」,這同樣可結案,也是一種勝利。

關卡:必須由真人送出。 草擬、驗證收件人、存檔、標註為草稿,然後停止。任何帶有CAPTCHA和簽名勾選框的入口網站,只能由真人操作。


步驟 0 — 先閱讀該機關網站。這是最省錢的規則。

在草擬任何內容前,先到該機關自己的網站上尋找該文件。

已公布的收費標準,證明的是該機關經常被索取資料,而不是索取資料一定得付費。 某個縣曾被報導以每年34.50美元的價格販售其資本化率研究報告,但同一份報告過去四年的資料卻免費公布在其統計頁面上。一次網頁抓取就省下了這筆錢和三週的等待時間。

接著檢查鄰近機關:一個州級機關可能公布縣級機關不願提供的彙整資料(但需閱讀其實際涵蓋範圍——一份州的「資本化率研究」可能只涵蓋州級評估的公用事業和鐵路財產)。並正確確認否定結果:在該機關已公布的報告中搜尋你的關鍵字。唯有確認沒有,才能使請求成為取得資料的唯一途徑。

步驟 1 — 找到正確的機關,並說對其名稱

沒有任何兩個州對機關的稱呼是相同的。 寫給錯誤的單位只會石沉大海。以商業物業估價為例:

州誰負責商業物業估價
MN、IA、NE縣 Assessor
KS縣 Appraiser
ND縣 Director of Tax Equalization
SD縣 Director of Equalization
WI沒有縣級 assessor——估價由市鎮級負責,因此應寫信給市政府

此外:有些州將大城市併入縣級 assessor 管轄(愛荷華州:Polk 郡涵蓋 Des Moines);有些則否(北達科他州:Fargo 市和 Cass 郡是分開的)。

管道優先順序:電子郵件、入口網站、郵寄。

  • 電子郵件:只要有地址就優先使用。在機關自己的頁面上驗證該地址。
  • 入口網站(GovQA、NextRequest):僅在未公布電子郵件地址時使用。入口網站需要真人操作帳號、CAPTCHA 和具約束力的簽名勾選框。
  • 郵寄:最後手段;在草稿標題中註明為備用方案。

有些頁面透過腳本渲染,使用 curl 無法取得有用內容。請用 Python 去除標籤並搜尋 @;如果確實沒有電子郵件地址,請如實說明,而不是猜測一個。

步驟 2 — 關鍵段落本身就是整個請求

在信件中主動指明保密法規並予以排除。 缺少這段,請求會直接被整體拒絕,因為保密條款是機關直覺反應的依據。有了這段,問題就不再是「我們能釋出這個嗎?」,而是變成「你指的是我們哪一份表格?」。

只請求機關自行編製的、全縣通用的表格與研究,這些資料不包含個別地塊或可識別所有者的資料,並主動表示願意接收經遮蔽所有者提交部分後的混合文件。

用於 assessor 請求且已成功使用的條款(請對照現行法規驗證):

州依據法規提出請求排除條款
MNMinn. Stat. 13.03 subd. 313.51 subd. 2 — 所有者提交的收入/支出、空置率、可出租面積、租約
KSK.S.A. 45-215 et seq.(保管人:45-218)45-221(b) — 納稅人提供給 appraiser 的財務資訊
IAIowa Code ch. 2222.7 商業機密 — 並引用 441.21(3)(a),該條款肯定地要求揭露公式或方法,以及 441.19(1)(a)
NENeb. Rev. Stat. 84-71284-712.05(3) 商業機密 / 專有資訊
NDN.D.C.C. 44-04-1844-04-18.4 商業機密 / 商業資訊
SDSDCL 1-27-1該州 assessor 保密條款的對等條文

若某法規強制要求揭露,請引用它(如上述愛荷華州案例):它會完全優先於保密條款。

不要改寫已被接受的段落。 一旦某個機關接受了你的措辭,就對其同級機關原封不動地重複使用,只需更換名稱;改寫過的版本會引來第二輪的範圍釐清問題。透過對照原始已被接受的版本進行雜湊比對,來驗證段落未被批次編輯破壞。

步驟 3 — 第一封信中永遠要包含的三件事

  1. 要求五年,而非一年。 「涵蓋2022年至2026年(含)的評估年度。」 對機關而言搜尋一次,就能獲得五倍的資料——而這個序列本身就是有價值的產品(它顯示了機關如何調整其費率)。加上:「請寄送您們持有的任何年份;部分回答也是有幫助的回答。」 如此,即使缺少某一年份,也不會使回覆停滯。
  2. 給他們一個簡單的退場機制。 「若貴辦公室並不維護此類表格,一行字說明即可結案,我不會再跟進。」 一份書面的否定回答即為結案,對他們來說只需花費三十秒,而非撰寫拒絕函。
  3. 先索取費用估算。 「若處理此請求會產生費用,請先告知估算,我將縮小請求範圍。」 有些機關會同時按小時計費,用於尋找文件和遮蔽資料——等於同時啟動兩個計費碼表。

步驟 4 — 批次發送前的檢查

  • 檢查每個收件人網域的MX記錄: dig +short MX <domain>。可及早發現打字錯誤,避免十九次退信。
  • 從頭到尾完整閱讀一封信件。 不是看差異比對,而是看完整的信件內容。
  • 在整個活動中保持請求者身份一致(同一個人或同一家公司,同一地址),以便回覆能串連起來,沒有人會再問你是誰。
  • 以純文字格式發送。強制換行的信件在HTML中會變形。

步驟 4b — 網頁表單是充滿敵意的管道。請為兩種陷阱做好準備。

  1. 不會告知你的字數上限。 訊息欄位可能會將2000個字元的內容無聲地截斷為1000字。對於任何表單,請事先準備一個簡短版本:法規引用、帶有年份範圍的請求內容、保密免責聲明、費用估算請求、聯絡方式。免責聲明是最後才能刪減的內容。

  2. Web 應用防火牆直接拒絕整個內容(Event Type: signature)。原因在於標點符號,而非長度:裸的撇號是標準的SQL注入特徵。 清除信件內容和主旨中的 ' " ( ) & / ; = < > -- 以及非ASCII字元。用 "and" 代替 "&",刪除法規小節而非用括號引用,說 "your Office derived" 而非 "the Office's"。用程式碼進行稽核:

    python3 -c "s=open('body.txt').read(); print({c:s.count(c) for c in \"'\"()&/;=<>\" if c in s})"
    

開始前就先知道備用方案: 隱藏電子郵件的機關仍然會公布街道地址。一個與你纏鬥三輪的表單不值得再試第四輪;改用郵寄。

步驟 5 — 記錄發送,否則等於沒發生過

保留法定主旨行——紀錄官據此分派信件,回覆也會以此為線索串連。將每份草稿的標題從 NOT SENT 改為 SENT <日期> from <地址>, messageId <識別碼>,將信件正文原封不動地保留在下方作為記錄,並更新你的追蹤清單。重新檢查每個被批次編輯觸及的行:對狀態欄進行全域搜尋並取代,可能會不小心將未發送的網頁表單列標記為 SENT。

步驟 5b — 需要附件的回覆

某些郵件 MCP(例如 Zoho)無法上傳附件。透過交易型郵件服務(例如 Mailgun),從同一個地址發送該回覆,並設定 h:In-Reply-To 和 h:References 為機關訊息的 Message-ID,以串連回覆,並保留其主旨。使用 curl 時,請對每個標頭和內容欄位使用 --form-string——-F 會將以 <(每個 Message-ID)或 @ 開頭的值視為「讀取此檔案」。透過服務商的 events API 確認投遞成功。

機關自己的表單通常在其網站上。 如果是平面 PDF,使用 reportlab 疊加文字,將詳細規格放在第二頁,並在發送前將頁面渲染為 PNG 並檢視(文字落在標籤上的情況遠比你想像常見)。

歸還表單時要縮小範圍。 費用警告是說明你已持有的資料、並僅要求剩餘部分的最佳時機,記得先要求費用估算。

一個指明輸入資料的軟性拒絕,並非對衍生表格的拒絕。 「我們使用來自租金調查的數據,這些數據是保密的。」這句話透過指向保密的輸入資料來回答一項請求,但跳過了衍生出來的研究報告。將被跳過的項目重新以是/否方式提問,感謝他們,並再次提供一行退場機制。保持禮貌:你將來還需要這個機關的下一次答覆。

步驟 6 — 追蹤,因為通常沒有截止期限

那個短時限通常不適用於你。 入口網站標示的「10個工作天」可能僅適用於查詢自身資料的資料當事人。一般性的政府資料請求通常只會得到「合理的時間」(例如 Minn. Stat. 13.03 subd. 3),這根本沒有設定時限。唯有持續追蹤才能施加壓力。 在發送當天即安排大約兩週後的追蹤(參見 pending-queue 鉤子),內容包含案件編號、入口網站路徑、指定聯絡人以及「請勿改寫請求內容」。追蹤函僅是確認狀態;切勿在後續追蹤中重新定義請求範圍。

步驟 7 — 收到的資料可以再發布嗎?

在開始以此資料建構任何東西之前,先回答這個問題。

  • 明尼蘇達州:可以,包括商業用途。 機關必須允許「不受限制地使用該資料,即使為商業目的,除非有特定法定授權禁止」—— 明尼蘇達州檢察長意見書 852 (1995)。
  • 其他各州:事實本身無著作權(Feist 案判決)—— 只有特定的選擇或編排方式才可能享有。重新發布數字,不要發布其文件版面配置。 將資料重新表達到你自己的架構中。
  • 其他地方,使用權部分尚無定論。 在主張之前,先閱讀該州的商業用途條款,並誠實地標記你的檔案(「尚未獲准再發布」是你的標記,而非機關的限制——不要將其引用為限制條件)。

步驟 8 — 解析收到的資料

將原始檔案與解析後的輸出一起快取,並記錄其 sha256 和標準 URL,切勿重新抓取。

不同年份間的標籤會發生偏移。 某個縣自己的列標籤,在四張年度報表中分別為 22、22、18、18,且物業類型會消失。手動編寫對照表,並在每筆記錄中保留原始標籤。切勿使用模糊比對 —— 這就是錯誤數字看似正確地被輸出的原因。消失的類型應視為不存在,而非零。

不要相信對 pdftotext 輸出進行正則表達式比對就能告訴你結構。 一個缺少數字的字元類別,可能會將 Warehouse <25% Office / >20K 在 2 處截斷,並無聲地將四行合併為兩行。在相信你的提取結果前,請將行數與來源進行比對。

在基於第二個來源進行跨來源比對之前,先證明其可行性。 同一個州的兩個縣,即使文件類型相同,也可能完全沒有完全相同的物業類型名稱。

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/image-riff

Turn one or more reference images into original art in that reference's own visual language, then cut it to whatever surface it's for. Use when you paste or point at art and say "use this as the base image", "generate art from this", "riff on this", "some creative ideation with these images", "make me a channel banner / avatar / cover / plate", "wilder version of this", or want a spread of options off one piece of reference. This is the TASK skill; the engine is the `make-art` tool skill.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

相關技能