Real estate investing operations platform for DataSift.ai. 21 installable Claude skills plus the 74-agent pipeline behind them: county data intake, enrichment, deal analysis, dispo, and CRM...
Overview
Full-stack real estate investing operations platform built around DataSift.ai. 1. 27 current packages that teach Claude to run a specific REI workflow: comp a property, estimate a rehab, find the heirs, score your phone numbers, grade your cold calls. Install them into Claude Code or Claude Cowork from the plugin marketplace, and they keep themselves up to date. 2. The pipeline that pulls county distress data, enriches it through 10 steps, and pushes it into DataSift ready for sequential marketing. Requires a DataSift.ai account. Start with the skills. Most people never need anything else. That installs all 27 current packages as plugins. Then turn on updates once: run /plugin, open , select , choose . From then on every improvement pushed here reaches you on its own. Claude Code leaves auto-update off for any marketplace that is not Anthropic's, which is why this step exists. Want one division instead of everything?
README
SiftStack
Full-stack real estate investing operations platform built around DataSift.ai.
Two things live in this repo:
- The REI skill library. 27 current packages that teach Claude to run a specific REI workflow: comp a property, estimate a rehab, find the heirs, score your phone numbers, grade your cold calls. Install them into Claude Code or Claude Cowork from the plugin marketplace, and they keep themselves up to date. You do not need the platform to use these.
- The platform. The pipeline that pulls county distress data, enriches it through 10 steps, and pushes it into DataSift ready for sequential marketing. Requires a DataSift.ai account.
Start with the skills. Most people never need anything else.
Install the skill library
Claude Code (two commands, then it updates itself)
/plugin marketplace add DataSift-Ty-Personal/SiftStack
/plugin install siftstack-all@siftstack
That installs all 27 current packages as plugins. Then turn on updates once: run /plugin, open Marketplaces, select siftstack, choose Enable auto-update. From then on every improvement pushed here reaches you on its own. Claude Code leaves auto-update off for any marketplace that is not Anthropic’s, which is why this step exists.
Want one division instead of everything? Install a bundle: siftstack-deal-analysis, siftstack-market-intel, siftstack-crm, siftstack-coaching or siftstack-operations. Or install any single skill by name, such as /plugin install rehab-estimator@siftstack.
Then ask Claude to run the SiftStack doctor. It tells you what works right now, what needs a key, what each key costs, and the free route without it.
If the install fails with Unrecognized key: "dependencies", your Claude Code predates bundles. Run claude update and try again.
Claude Cowork
Same library, same updates. Customize, then Plugins, then Add marketplace, and enter DataSift-Ty-Personal/SiftStack. Install siftstack-all or any single plugin from the list. Use Update on the marketplace to pull the latest.
Cowork runs skills inside a sandbox with restricted network access. The skills that need no credentials work there as they do anywhere. A skill that calls a paid API may be blocked from reaching it, and in that case run it from Claude Code instead.
Without plugins (any Claude Code version, one command)
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/DataSift-Ty-Personal/SiftStack/main/install.py | python3 -
# Windows PowerShell
irm https://raw.githubusercontent.com/DataSift-Ty-Personal/SiftStack/main/install.py | python -
That copies the skills into ~/.claude/skills/. Restart Claude Code and they are live. No clone, no pip install, no virtualenv. Python 3.9 or newer, standard library only. This route does not update itself: re-run it to pull changes. Add --plugins and it registers the marketplace and installs every plugin for you instead, which works even on a Claude Code too old for bundles.
Prefer to read the script before running it? That is the right instinct:
curl -fsSL -o install.py https://raw.githubusercontent.com/DataSift-Ty-Personal/SiftStack/main/install.py
less install.py
python3 install.py
Pick and choose
python3 install.py --list # the catalog, with descriptions
python3 install.py --only rehab-estimator comp-package # just these
python3 install.py --category "Deal Analysis" # a whole category
python3 install.py --dest .claude/skills # into a project, not your home dir
python3 install.py --dry-run # report, write nothing
Re-running is safe. Anything already current is skipped, and a package is only swapped in after it downloads and unpacks cleanly, so a failed update cannot leave you with a half-written skill.
Projects and the claude.ai app
Chat and Projects take the packaged file rather than a plugin. Download the .skill you want from dist/ and upload it to your session or Project:
https://raw.githubusercontent.com/DataSift-Ty-Personal/SiftStack/main/dist/rehab-estimator.skill
Every package in the catalog below is at that same path with its own name. .plugin files work the same way.
Point Claude at this repo and let it do the work
If you are already in a Claude Code session, this is usually the fastest route:
Read https://raw.githubusercontent.com/DataSift-Ty-Personal/SiftStack/main/skills/manifest.json and install the Deal Analysis skills for me.
The manifest is the machine-readable index of the whole library: every package, its category, its description, its download URL, and a SHA-256 of the exact bytes. It is what install.py reads, and it is regenerated by CI on every push so it cannot drift from what is actually published.
The catalog
27 current packages. python3 install.py --list prints this with full descriptions.
Deal Analysis
| Package | What it does |
|---|---|
comp-package |
Boundary-filtered comps for one property. Pulls sold and active listings live, buckets each comp by condition, and produces a dual-track ARV that prices the same-bedroom base case separately from a labeled reconfiguration upside. Ships an Excel workbook. |
rehab-estimator |
Room-by-room rehab costs across 4 tiers, with the locked Knox County master material list for exact SKU pricing. |
deep-prospecting-v5 |
Given a deceased owner, find the heirs and exactly who must sign to sell. SmartSkip relatives plus mandatory obituary research, about $0.24 per record. |
probate-property-finder |
Find the real property behind a probate filing when all you have is a case number and a decedent name. |
real-estate-comping |
The valuation method on its own: Two-Bucket ARV, adjustment tables, and disclosure vs non-disclosure state routing. |
deal-analyzer (plugin) |
Comps plus rehab plus MAO plus financing in one pass, with exit strategy comparison. |
Market Intelligence
| Package | What it does |
|---|---|
sift-market-research |
Zip code scoring off DataSift Market Finder, 6 weighted factors, delivered as a 7-sheet Excel report. |
first-market-county-data |
Where to actually pull county distress lists for any US county, across all 7 notice types, including the FOIA templates. |
buyer-prospector |
Build a cash buyer list for any county, categorize the LLCs and trusts, and resolve the humans behind them. |
Operations
| Package | What it does |
|---|---|
phone-validator |
Trestle scoring with 5 dial-priority tiers and a litigator risk check. |
text-touch-builder |
A four-touch pre-call SMS sequence per record, varied like cold email so no two reads as a form letter. Refuses any message that sounds machine-written. |
sequential-presets |
Design and build the sequential marketing filter presets in DataSift. |
caller-reputation-monitor |
Keep your outbound numbers out of carrier “Spam Likely” labels. |
playbook-creator |
Turn a transcript or a recording into a real SOP with process maps. |
candidate-intake |
Aggregate job applicants from Indeed, Gmail, and Facebook into one scored master list. |
team-hiring |
Who to hire next and what they own. The five roles with their daily tasks and one North Star KPI each, hiring geography and pay bands, job post templates, the interview, and the first two weeks. |
vendor-directory-builder |
Build a vetted contractor or vendor directory for any market: mine a local community for names people vouch for, verify every one against public records, sweep for geography and gaps, and ship a filterable Excel with top picks. Also the tool for vetting a found or AI-generated list. |
dispo-deal-blast |
Text a wholesale deal to a vetted buyer list: who to include, what the message may and may not say, the guards that keep a wrong price from going out, and how to turn the replies into a verified buyer phonebook. |
contractor-call-sheet |
Turn a finished directory into action: a printable one-page call sheet of the top picks by trade, personalized first-contact texts and voicemails, and the vetting-call question script. |
Coaching and Performance
| Package | What it does |
|---|---|
cold-call-coach |
Pull your real call recordings, transcribe them with tonality notes, and grade every conversation against the cold-calling rubric. |
lead-manager-coach |
Same engine, graded on qualification: the 4 pillars, roadblocks, next-action discipline. |
closer-coach |
Same engine, graded on the money conversation, the offer stack, and commitment locking. |
kpi-engine |
Dials, connect rates, correct numbers, leads, and funnel pacing straight from your own DataSift account. |
CRM
| Package | What it does |
|---|---|
sift-sequences |
26 sequence templates and how to build them. |
account-blueprint |
Build a DataSift account in the reference account’s structure over the API: presets, statuses, lists, tags, custom fields, task presets, sequences, SiftMap presets, every object read back. Ships the current blueprint. |
sift-operations (plugin) |
The CRM operations encyclopedia: SiftLine boards, drip campaigns, tasks, filters, tags, skip trace workflows. |
Setup
| Plugin | What it does |
|---|---|
siftstack-core (plugin) |
The doctor and the guided setup. Every bundle installs it, so you can always ask what works right now and what needs a key. |
Two superseded packages (deep-prospecting, deep-prospecting-v4) stay in the repo so old runs still resolve. The installer skips them unless you ask for one by name. Use deep-prospecting-v5, which is about 5x cheaper and returns relatives on records where v4 returned nothing.
What a skill needs from you
14 work on install, out of 27 current packages. No key, no login, no card. Ask Claude to run the SiftStack doctor, or from a terminal:
python3 install.py --doctor
It reads your environment and a .env if you have one, then prints what works now, what needs you signed in somewhere, and what needs a credential. Every blocked skill prints its no-API alternative on the same line, so you are never told no without being told what to do instead. It sends no requests, spends nothing, and never prints a credential value.
| Tier | Count | What it means |
|---|---|---|
| No credentials | 14 | Works on install |
| A login you already have | 8 | DataSift, SmrtPhone, Google. Browser-driven, no API access needed |
| A metered API key | 5 | Faster and deeper, and every one has a free route |
Every paid step has a no-API route. Comping runs by browser, heir research runs off obituaries and free people-search, KPIs run off a CSV export, coaching runs off any dialer’s recordings. The no-API playbook has the method for each, and is honest about the three things that have no substitute.
Skills degrade rather than fail: a missing key means that step is skipped and the run says so.
| Guide | |
|---|---|
| Getting started | Install, check readiness, add credentials, first runs |
| No-API playbook | The free route for every paid step |
| API contracts | What each API actually does, and the traps that cost real time |
.env.skills.example |
Every variable, what it unlocks, what it costs |
The agent system
The platform is 82 agents across 9 divisions.
- The interactive map, searchable and filterable by division, status, and whether a human still signs off.
- docs/AGENT-MAP.md, the same thing as a document you can read in the repo or hand to Claude.
Both render from docs/agents.json, so they cannot disagree about what the system does.
Each agent carries a trigger, the steps it runs, where a person signs off, what comes out, and the trap it exists to avoid. That last field is the one worth reading: every one is a real production failure, and most of them failed silently for days or weeks before anyone noticed.
Web scrape (gated site) ──┐
Scanned PDF (OCR) ──┤
Courthouse photos ──┼──► Enrichment ──► DataSift ──► Sequential
Dropbox auto-poll ──┤ (10 steps) (API) marketing
CSV re-import ──┘
│
▼
Deal analysis ──► Dispo ──► Lender package
Divisions: Data Acquisition, Enrichment and Identity, Deal Analysis, Dispo and Buyers, Outreach and Marketing, CRM Operations, Market Intelligence, Coaching and Performance.
Every gated action routes to a human. Outreach identity is anchored to the assigned person rather than a company name, and no agent sends a dollar figure to a seller or a buyer without a person approving it.
The platform
Requires a DataSift.ai account. Works with any market, any county, any state.
Quick start
git clone https://github.com/DataSift-Ty-Personal/SiftStack.git
cd SiftStack
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # then fill in your keys
python src/main.py daily # new notices since last run
python src/main.py daily --upload-datasift # scrape, enrich, upload
python src/main.py daily --counties Knox --types foreclosure,probate
Data intake
| Method | How it works | Use case |
|---|---|---|
| Web scrape | Playwright plus a Cloudflare Turnstile solver | Public notice sites, county clerk portals |
| PDF import | pypdfium2 rendering plus Tesseract OCR | Scanned tax sale lists, legal documents |
| Photo import | OpenCV preprocessing, OCR, LLM parse | Phone photos of courthouse terminal screens |
| Dropbox watch | Polls a folder every 15 minutes | A runner uploads from the field, the system processes |
| CSV re-import | Re-enrich existing records | Refresh stale data, merge datasets |
All five produce the same records and flow through the same enrichment pipeline.
Enrichment pipeline
Deduplicate, filter vacant land, flag entity owners, resolve probate property, tax delinquency, address standardization (Smarty), property data (Zillow), obituary and heir research, skip trace (Tracerfy), phone scoring (Trestle).
Every API is optional. A missing key skips that step and the run reports it.
Scheduled cloud pull
The county pull runs unattended on Fly.io rather than on a workstation. deploy/FTM_RUNBOOK.md is the runbook.
python src/ftm_runner.py --doctor # credentials, egress, state, saved searches
python src/ftm_runner.py --max-notices 2 # bounded dry run, writes nothing
python src/ftm_runner.py --commit # the real thing
python src/ftm_schedule.py --next # next 5 fire times
The scrape is gated on egress IP, not on code. From an office IP the notice page carries no CAPTCHA at all, just a refusal to serve. From a datacenter IP it serves the normal challenge. A blocked run exits 3 rather than 1, because no retry fixes it and treating it as a normal failure sends you debugging the parser. Run --doctor before anything else.
Zero notices is a failure, not a quiet day. There is deliberately no inference that a missing challenge means a cleared gate. That exact reasoning reported 13 consecutive dead runs as successful over 19 days.
Deal analysis
# Comps, ARV, rehab, buyers, into one workbook
python src/comp_package.py --address "158 Old State Rd" --zip 37914 \
--beds 2 --baths 1 --sqft 1946 --bbox "35.996,36.016,-83.895,-83.840"
# The hour after you walk a house: 9 sheets, anchored to the live CRM record
python src/post_walkthrough.py --walkthrough-template
python src/post_walkthrough.py --address "..." --walkthrough walk.json
# The 8-piece private lender package
python src/lender_package.py --spec deals/EXAMPLE_lender_spec.json
python src/lender_docs.py --spec deals/EXAMPLE_lender_spec.json
deals/EXAMPLE_lender_spec.json is a scrubbed, working spec. Copy it and fill it in.
Configuration
Every variable is documented in .env.example. The ones that matter most:
| Variable | Service | Cost |
|---|---|---|
DATASIFT_EMAIL / DATASIFT_PASSWORD |
DataSift.ai | Account required |
CAPTCHA_API_KEY |
2Captcha | about $3 per 1,000 solves |
SMARTY_AUTH_ID / SMARTY_AUTH_TOKEN |
Smarty | 250 free/month |
OPENWEBNINJA_API_KEY |
OpenWeb Ninja | 100 free/month |
ANTHROPIC_API_KEY |
Anthropic | about $0.001 per record |
TRACERFY_API_KEY |
Tracerfy | $0.02 per record |
TRESTLE_API_KEY |
Trestle | $0.015 per phone |
SLACK_WEBHOOK_URL |
Slack or Discord | Free |
Running one county daily costs roughly $40 per month in API spend.
Adapting to your market
The architecture is market-agnostic. Knox and Blount County, TN are what it is proven on.
- Edit
SAVED_SEARCHESinsrc/config.pyfor your county’s notice site. - Add your county’s tax API alongside Knox in
src/tax_enricher.py. - The parser handles 7 notice types already: foreclosure, tax sale, tax delinquent, probate, eviction, code violation, divorce.
- Photo import and the enrichment pipeline are county-independent and work nationwide.
Contributing to the skill library
The source of truth is the folder, not the ZIP. skills// is what you edit and what gets reviewed; dist/.skill is a build product.
# edit skills/rehab-estimator/SKILL.md, then
python tools/build_skills.py --build --manifest
python tools/build_skills.py --verify # CI runs this
CI blocks a merge if a distributed archive drifts from its source, if the manifest is stale, if any SKILL.md is missing its name or description frontmatter, or if anything that looks like a credential appears in a package.
That frontmatter check exists because a skill with no frontmatter is silently undiscoverable. Claude has nothing to match a request against, so it simply never fires and no error is ever raised. One skill shipped that way for months.
- Fork, branch, commit.
- Run
python tools/build_skills.py --build --manifestbefore you push. - Open a pull request.
License
MIT. See LICENSE.
Built by DataSift.ai for the REI community.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add datasift-ty-personal/siftstack