higherdata 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "higherdata",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "higherdata": "dist/index.js",
7
+ "hd": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "skills",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "engines": {
16
+ "node": ">=24"
17
+ },
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "typecheck": "tsc --noEmit",
21
+ "test": "vitest run"
22
+ },
23
+ "dependencies": {
24
+ "commander": "15.0.0",
25
+ "csv-parse": "7.0.3",
26
+ "ink": "7.1.1",
27
+ "jsonc-parser": "3.3.1",
28
+ "libphonenumber-js": "1.13.14",
29
+ "react": "19.3.0",
30
+ "smol-toml": "1.9.0",
31
+ "tldts": "7.4.16",
32
+ "tr46": "6.0.0",
33
+ "zod": "4.6.5"
34
+ },
35
+ "devDependencies": {
36
+ "tsup": "8.5.1",
37
+ "typescript": "5.9.3"
38
+ },
39
+ "exports": {
40
+ "./suppression": {
41
+ "types": "./dist/suppression.d.ts",
42
+ "import": "./dist/suppression.js"
43
+ }
44
+ },
45
+ "license": "SEE LICENSE IN LICENSE",
46
+ "description": "Find, enrich and clean B2B data with HigherData.",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/HIGHEROPS-INC/higherdata.git",
50
+ "directory": "packages/cli"
51
+ },
52
+ "higherdata": {
53
+ "minimumServerVersion": "0.2.0"
54
+ }
55
+ }
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: higherdata-build-list
3
+ description: Build a HigherData company starter list from a website ICP or an existing saved ICP, with editable filters and bounded record counts.
4
+ ---
5
+
6
+ Use the HigherData CLI with `--json`. Check the selected workspace and space with `higherdata --json whoami`; use `higherdata --json use SPACE` if needed. Use `higherdata --json usage` and `higherdata --json limits` to check the plan limits. Never print the API key.
7
+
8
+ For a new ICP, use the customer's explicit public website. The first proposal needs a website; omitting it later uses the last accepted website in this space. Do not infer it from an email domain.
9
+
10
+ ```sh
11
+ higherdata --json tools icp.propose --website https://cedar.example
12
+ higherdata --json tools icp.create --input "$ICP_CREATE_INPUT"
13
+ ```
14
+
15
+ Set `ICP_CREATE_INPUT` to a JSON object with `name`, the returned `website` and the complete returned `profile`, edited to match the user's target market. Show the proposed industries, location, size and buyer criteria with their evidence. After the user accepts that exact profile, rerun the same create command with `--execute --yes`. The AI proposal uses the workspace's configured AI mode and credit. Core cannot use Insights-only filters.
16
+
17
+ For an existing ICP, read it first:
18
+
19
+ ```sh
20
+ higherdata --json tools icp.get
21
+ higherdata --json tools icp.preview --id SAVED_ICP_ID
22
+ higherdata --json tools icp.run --id SAVED_ICP_ID --execute --yes
23
+ ```
24
+
25
+ Replace ids with those returned by HigherData. Run `icp.run` for the accepted saved ICP. It creates at most 100 companies from bounded search pages. The preview count can be a baseline that excludes Insights filters; explain `isIcpBaseline` when true.
26
+
27
+ Suppression applies to both the search and saved records. Report the list id, number added. If a run fails after linking a list, inspect that list instead of blindly starting another run:
28
+
29
+ ```sh
30
+ higherdata --json tools lists.get --id LIST_ID
31
+ ```
32
+
33
+ This skill creates a HigherData list. Sending records to a CRM is a separate task through a reviewed change set.
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: higherdata-enrich-csv
3
+ description: Enrich a CSV or JSONL file through HigherData with explicit mappings, a dry-run estimate, resumable job progress and a downloaded result file.
4
+ ---
5
+
6
+ Run CLI commands with `--json`. Verify the selected space and limits:
7
+
8
+ ```sh
9
+ higherdata --json whoami
10
+ higherdata --json usage
11
+ higherdata --json limits
12
+ ```
13
+
14
+ Inspect the input headers locally. Choose the operation and exact target-to-column mappings with the user; do not guess ambiguous identifiers. Company enrichment can map `domain=Website`. Person enrichment can map `email=WorkEmail` or the supported LinkedIn/name and company fields. Preserve original columns. Do not add a suppression override.
15
+
16
+ ```sh
17
+ higherdata --json enrich companies.csv --operation enrich.company --map domain=Website --dry-run
18
+ ```
19
+
20
+ This uploads and validates the mapping without running enrichment. Read the row count and compare it with the file limit. File uploads are retained privately for up to seven days. Email operations need explicit confirmation because provider submissions use the monthly verification allowance. If the file or mapping changes, preview again.
21
+
22
+ ```sh
23
+ higherdata --json enrich companies.csv --operation enrich.company --map domain=Website --wait
24
+ ```
25
+
26
+ Retain the returned job id. Waiting polls that job; it does not create a second job. If interrupted, find the existing job and resume:
27
+
28
+ ```sh
29
+ higherdata --json jobs list
30
+ higherdata --json jobs wait JOB_ID
31
+ higherdata --json jobs get JOB_ID
32
+ higherdata --json jobs download JOB_ID --format csv --output companies-enriched.csv
33
+ ```
34
+
35
+ Use an unused local output filename. The download streams CSV into the file even with `--json`; it is not a JSON report. Inspect the job JSON for completion before downloading. A failed or cancelled job is not success. Report `counts.matched`, `counts.noMatch`, `counts.suppressed`, `counts.failed` from the actual job, along with the output path. If the job is still running, report its id and status. Never reupload simply because waiting was interrupted, and never retry an uncertain start automatically.
36
+
37
+ The downloaded comparisons distinguish empty, same and conflict values with provenance. Enrichment alone does not write to the customer's CRM. Any requested CRM update must become a change set for separate review.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: higherdata-suppression
3
+ description: Inspect, check or update HigherData suppression lists, including dry-run imports and the limits on owner exclusions.
4
+ ---
5
+
6
+ Use CLI commands with `--json` in the intended space. Suppression is already applied to search, lookup, enrichment, list export and CRM change sets; never work around it by switching surfaces or recovering hidden records.
7
+
8
+ ```sh
9
+ higherdata --json suppress list
10
+ higherdata --json suppress check domain cedar.example
11
+ higherdata --json suppress create Customers --kind customers --dry-run
12
+ higherdata --json suppress import customers.csv --list LIST_ID --key-type domain --dry-run
13
+ ```
14
+
15
+ Only commit an explicitly requested list or import after reviewing the preview (remove `--dry-run` on that same command). Read the import's invalid, duplicate, existing and new counts; do not silently reinterpret invalid input. Select `domain`, `email`, `email_sha256` or another supported key type deliberately. For hashed email uploads use the published normalization spec at `/docs/suppression` and the CLI's shared suppression module; hashing arbitrary email text will not enforce the intended rule.
16
+
17
+ ```sh
18
+ higherdata --json suppress export --list LIST_ID --format jsonl --all
19
+ ```
20
+
21
+ Export includes customer-controlled list entries only, never the global erasure list. Treat exported entries as private data.
22
+
23
+ An owner can explicitly exclude one eligible list for one call using `--exclude-list LIST_ID` on commands that support it. This is not a durable disable switch. Eligible kinds are customers, open_deals, competitors, partners, employees and custom. `do_not_contact`, `opt_out` and global suppression can never be excluded. Do not introduce an exclusion to fix an empty search; ask the owner about the intended exception when the user actually requests one. API keys do not prove owner status, so a refused exclusion remains refused.
24
+
25
+ Report counts and reasons returned for the keys the user supplied. A search's suppressed count does not identify the hidden records.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: higherdata-usage
3
+ description: Check HigherData plan limits, email verification allowance, monthly activity and resets.
4
+ ---
5
+
6
+ Use the CLI's JSON output to read actual workspace state:
7
+
8
+ ```sh
9
+ higherdata --json whoami
10
+ higherdata --json usage
11
+ higherdata --json limits
12
+ ```
13
+
14
+ All plans offer unlimited searches, lookups and enrichment under fair use. Identify the plan, effective request rate, concurrency, monthly email verification allowance, used and remaining counts, UTC reset time and monthly activity. Do not invent missing values or assume the top plan has no protective ceilings.
15
+
16
+ Paid email verification submissions use the monthly allowance. Cache hits and polling do not. Core includes 2,000, Insights 10,000, and Unlimited 50,000 per UTC month; configured staff overrides can change these values. Read the actual returned allowance rather than assuming the default. AI uses the workspace's configured mode and credit separately.
17
+
18
+ Limits combine protective ceilings, the plan, staff overrides and tighter customer rate or record caps. Honor reset times and returned retry delays. Never split a request across keys or spaces to evade a limit. A verification allowance refusal stops new paid submissions until reset or an authorized plan change. Search remains available. Use the returned upgrade link to open HigherTools, select the account, then Billing.
19
+
20
+ Do not adjust caps or create keys under a usage-check request.
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: higherdata-work-email
3
+ description: Find and verify work emails in HigherData using company pattern evidence, a preview and explicit confirmation of the verification allowance.
4
+ ---
5
+
6
+ Use `--json` and the intended space. Check usage and limits before a paid request. For finding, use the person's known first and last names and a company domain or opaque company id. Do not invent an address and describe it as verified.
7
+
8
+ ```sh
9
+ higherdata --json tools email.find --input '{"firstName":"Ava","lastName":"Reed","company":{"domain":"cedar.example"}}'
10
+ higherdata --json tools email.verify --email ava@cedar.example
11
+ ```
12
+
13
+ These generic commands preview by default. Read the candidates, suppression outcome and monthly verification allowance. Each candidate sent to the paid provider uses one verification; cache hits and polling are free. Confirm the request with the user, then execute the identical input with `--execute --yes`.
14
+
15
+ If the result is pending, retain its `requestId`. Read it through the same tool, rather than submitting a new address search:
16
+
17
+ ```sh
18
+ higherdata --json tools email.find --request-id REQUEST_ID
19
+ higherdata --json tools email.verify --request-id REQUEST_ID
20
+ ```
21
+
22
+ A preview read does not advance pending work. To continue an approved request, use its existing request id with `--execute --yes`. Honor the returned retry delay, bound waiting, and report pending status if it does not finish. Never treat a timeout as permission to restart.
23
+
24
+ Report the returned `deliverable`, `undeliverable`, `risky` or `unknown` status, timestamp and verification allowance used. Suppressed records must stay hidden. Do not label risky or unknown addresses as deliverable. This skill finds data only; sending email is a separate task.