Best for
- "where do we owe sales tax" / "nexus check" / "sales-tax exposure by state".
- Quarterly - end of fiscal quarter.
- Company cross round-number revenue mark ($500K, $1M, $5M) or add employees in new state.
gethouston/houston/store/agents/bookkeeping/.agents/skills/check-my-sales-tax-nexus/SKILL.md
See where you owe sales tax. I total revenue and transaction counts per US state from Stripe (or QuickBooks / Xero / invoices as fallback), compare each state's totals against its economic-nexus threshold for the quarter and trailing 12 months, pinpoint the month each crossed state was triggered, and flag physical-nexus states (W-2 employees, offices, inventory / FBA). I rank exposure highest-dollar first and call out the closest pre-crossing states as early warnings. I prep — you register and r
Decision brief
State-by-state economic-nexus check. I total revenue and transactions per US state for the period, compare against each state's threshold, pinpoint the crossing month, and flag physical-nexus triggers (employees, offices, inventory) regardless of revenue. Exposure is ranked high…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/gethouston/houston --skill "store/agents/bookkeeping/.agents/skills/check-my-sales-tax-nexus"Inspect the Agent Skill "check-my-sales-tax-nexus" from https://github.com/gethouston/houston/blob/10d9551da3a639803421a9004117f9e5633ce3a1/store/agents/bookkeeping/.agents/skills/check-my-sales-tax-nexus/SKILL.md at commit 10d9551da3a639803421a9004117f9e5633ce3a1. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
"where do we owe sales tax" / "nexus check" / "sales-tax exposure by state".
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.
I read your bookkeeping context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app file drop URL paste) and wait.
1. Read context. Load context/bookkeeping-context.md, config/context-ledger.json, config/chart-of-accounts.json. Required ledger: universal.company.state, domains.revenue.contractSource, domains.tax.stateFilingFootprint. SaaS taxability vary by state - compute exposure regardles…
compliance/sales-tax/{YYYY-QN}.md (indexed as sales-tax-nexus)
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 85/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 91 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
State-by-state economic-nexus check. I total revenue and transactions per US state for the period, compare against each state's threshold, pinpoint the crossing month, and flag physical-nexus triggers (employees, offices, inventory) regardless of revenue. Exposure is ranked highest-dollar first; the three closest pre-crossing states show up as early warnings. I never register and I never remit.
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.
If none of the required categories are connected I stop and ask you to connect Stripe first, since most startups invoice through it.
I read your bookkeeping context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.
Read context. Load context/bookkeeping-context.md, config/context-ledger.json, config/chart-of-accounts.json. Required ledger: universal.company.state, domains.revenue.contractSource, domains.tax.stateFilingFootprint. SaaS taxability vary by state - compute exposure regardless of taxability posture.
Determine period. Use user {YYYY-QN} if given; else most recent completed fiscal quarter. Also report trailing 12-month rolling view (most state thresholds measure this).
Pull revenue by ship-to state. Source priority:
a. Stripe via Composio. composio search billing → discover Stripe slug → pull charges in period with customer billing / shipping state. SaaS use billing address; shipped goods use ship-to. Fall back to card country + postal code if address missing.
b. Invoices (CSV / paste). User provides invoice-level data with state, amount, date, customer id.
c. Accounting system via Composio. QuickBooks Online / Xero customer list with state tags.
None available → stop, ask for source. Never invent state attributions.
Aggregate per state. Sum revenue; count distinct transactions (thresholds use "separate transactions" - multi-line invoice = one; monthly subscription = 12 per year per customer).
Compare against economic-nexus thresholds. Use reference table (re-check current DOR guidance if cached date on ledger > 12 months old):
| State | Threshold (OR unless noted) |
|---|---|
| CA | $500K revenue (no transaction count) |
| NY | $500K revenue AND 100 transactions (both) |
| TX | $500K revenue (no transaction count) |
| FL | $100K revenue (no transaction count) |
| IL | $100K OR 200 transactions |
| MA | $100K (no transaction count) |
| WA | $100K (no transaction count) |
| CO | $100K (no transaction count) |
| GA | $100K OR 200 transactions |
| NC | $100K OR 200 transactions |
| PA | $100K (no transaction count) |
| OH | $100K OR 200 transactions |
| VA | $100K OR 200 transactions |
| MI | $100K OR 200 transactions |
| NJ | $100K OR 200 transactions |
| Default (all others) | $100K OR 200 transactions |
"OR" states: cross either = nexus. "AND" states (NY): must cross both. Most measure over trailing 12 months or prior calendar year - note which per row.
Crossing date. For each crossed state, walk cumulative revenue + transactions month by month. Pinpoint crossing month. Most states give 30–60 day grace period to register.
Physical-nexus flags. Regardless of economic threshold:
domains.payroll / HR system - ask if not captured). Any W-2 employee = physical nexus.Rank by exposure. Sort crossed states by cumulative revenue (descending). Each row: state; revenue in period + rolling 12m; transactions in period + rolling 12m; threshold applied; date crossed; physical-nexus flag; cumulative exposure; next action ("Register via Avalara / TaxJar / direct DOR portal" / "Engage SALT advisor" / "Already registered per stateFilingFootprint" / "Monitor - below").
Write compliance/sales-tax/{YYYY-QN}.md. Atomic write. Structure:
Append to outputs.json. Row: {type: "sales-tax-nexus", title: "Sales-tax nexus {YYYY-QN}", summary, path, status: "draft", domain: "compliance"}. Read-merge-write.
Summarize to user. One paragraph: # states newly crossed, total exposure, top-3 by risk, physical-nexus flags, next move per crossed state. Never register, never remit.
compliance/sales-tax/{YYYY-QN}.md (indexed as sales-tax-nexus)Alternatives
K-Dense-AI/scientific-agent-skills
Medicinal chemistry filters for compound triage. Apply drug-likeness rules (Lipinski, Veber, CNS), structural alert catalogs (PAINS, NIBR, ChEMBL), complexity metrics, and the medchem query language for library filtering.
davepoon/buildwithclaude
Automate Zoho CRM tasks via Rube MCP (Composio): create/update records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.
JasonColapietro/suede-creator-skills
Suede-owned prospecting and qualification discipline. Use when defining an ICP, sourcing and enriching a bounded lead list, finding early adopters or design partners, scoring account fit, or documenting disqualification evidence. NOT FOR: sending outreach (use suede-cold-email), changing CRM routing (use suede-revops), or profiling competitors instead of prospects (use suede-competitor-profiling).
coreyhaines31/marketingskills
When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses. Also use when the user mentions "prospecting," "build a prospect list," "find prospects," "find leads," "lead gen list," "find SaaS companies that," "find B2B companies," "find local businesses," "ICP-fit accounts," "who should we go after," "outbound list," "target account list," "find clients near me," "businesses without websites," "prospect research,"