apivault-skip-trace 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,15 @@
1
+ """Skip Trace & People Finder — Python SDK.
2
+
3
+ Usage:
4
+ from apivault_skip_trace import SkipTrace
5
+
6
+ st = SkipTrace("your_apify_token")
7
+ results = st.search_name("John Smith", location="Springfield, IL")
8
+ for person in results:
9
+ print(person["fullName"], person.get("phones"), person.get("emails"))
10
+ """
11
+
12
+ from .client import SkipTrace
13
+
14
+ __all__ = ["SkipTrace"]
15
+ __version__ = "0.1.0"
@@ -0,0 +1,173 @@
1
+ """Skip Trace client — thin wrapper over the Apify Actor API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import requests
6
+ from typing import Any
7
+
8
+ ACTOR_ID = "apivault_labs~skip-trace-people-finder"
9
+ API_BASE = "https://api.apify.com/v2"
10
+
11
+
12
+ class SkipTrace:
13
+ """Skip Trace & People Finder.
14
+
15
+ Look up anyone in the US by name, address, phone, or email.
16
+ Returns current + past addresses, phone numbers, emails,
17
+ relatives, aliases, and a match-confidence score.
18
+
19
+ Pricing: $6.50 per 1,000 lookups (pay only for matches).
20
+
21
+ Args:
22
+ token: Your Apify API token. Get one free at https://apify.com
23
+ timeout: Max seconds to wait for the run (default 120).
24
+ memory_mb: Memory for the run (default 256).
25
+ """
26
+
27
+ def __init__(self, token: str, *, timeout: int = 120, memory_mb: int = 256):
28
+ if not token:
29
+ raise ValueError(
30
+ "Apify API token required. Get one at https://console.apify.com/account#/integrations"
31
+ )
32
+ self._token = token
33
+ self._timeout = timeout
34
+ self._memory = memory_mb
35
+
36
+ def _run(self, input_data: dict[str, Any]) -> list[dict]:
37
+ """Run the actor and return dataset items."""
38
+ url = f"{API_BASE}/acts/{ACTOR_ID}/run-sync-get-dataset-items"
39
+ params = {"token": self._token, "timeout": self._timeout, "memory": self._memory}
40
+ resp = requests.post(url, json=input_data, params=params, timeout=self._timeout + 30)
41
+ if resp.status_code == 402:
42
+ raise RuntimeError(
43
+ "Insufficient Apify credits. Top up at https://console.apify.com/billing"
44
+ )
45
+ if resp.status_code >= 400:
46
+ raise RuntimeError(f"Apify API error {resp.status_code}: {resp.text[:200]}")
47
+ return resp.json()
48
+
49
+ def search_name(
50
+ self,
51
+ name: str,
52
+ *,
53
+ location: str | None = None,
54
+ max_results: int = 10,
55
+ source: str = "auto",
56
+ ) -> list[dict]:
57
+ """Search by full name.
58
+
59
+ Args:
60
+ name: Full name, e.g. "Jane Doe".
61
+ location: Optional city/state/ZIP to narrow results,
62
+ e.g. "Springfield, IL 62704".
63
+ max_results: Max people to return (1-100).
64
+ source: "auto" (recommended), "merge" (cross-reference), or "default".
65
+
66
+ Returns:
67
+ List of person dicts with addresses, phones, emails, relatives, etc.
68
+ """
69
+ query = f"{name}; {location}" if location else name
70
+ return self._run({
71
+ "name": [query],
72
+ "max_results": max_results,
73
+ "source": source,
74
+ })
75
+
76
+ def search_address(
77
+ self,
78
+ street: str,
79
+ city_state_zip: str,
80
+ *,
81
+ max_results: int = 10,
82
+ source: str = "auto",
83
+ ) -> list[dict]:
84
+ """Reverse address lookup — find people associated with an address.
85
+
86
+ Args:
87
+ street: Street address, e.g. "123 Main St".
88
+ city_state_zip: City, state ZIP, e.g. "Springfield, IL 62704".
89
+ max_results: Max people to return.
90
+
91
+ Returns:
92
+ List of person dicts.
93
+ """
94
+ return self._run({
95
+ "street_citystatezip": [f"{street}; {city_state_zip}"],
96
+ "max_results": max_results,
97
+ "source": source,
98
+ })
99
+
100
+ def search_phone(
101
+ self,
102
+ phone: str,
103
+ *,
104
+ max_results: int = 10,
105
+ source: str = "auto",
106
+ ) -> list[dict]:
107
+ """Reverse phone lookup.
108
+
109
+ Args:
110
+ phone: US phone number, e.g. "(202) 555-0182" or "2025550182".
111
+
112
+ Returns:
113
+ List of person dicts.
114
+ """
115
+ return self._run({
116
+ "phone_number": [phone],
117
+ "max_results": max_results,
118
+ "source": source,
119
+ })
120
+
121
+ def search_email(
122
+ self,
123
+ email: str,
124
+ *,
125
+ max_results: int = 10,
126
+ source: str = "auto",
127
+ ) -> list[dict]:
128
+ """Reverse email lookup — find the person behind an email.
129
+
130
+ Args:
131
+ email: Email address, e.g. "jane.doe@gmail.com".
132
+
133
+ Returns:
134
+ List of person dicts.
135
+ """
136
+ return self._run({
137
+ "email": [email],
138
+ "max_results": max_results,
139
+ "source": source,
140
+ })
141
+
142
+ def bulk_search(
143
+ self,
144
+ *,
145
+ names: list[str] | None = None,
146
+ addresses: list[str] | None = None,
147
+ phones: list[str] | None = None,
148
+ emails: list[str] | None = None,
149
+ max_results: int = 100,
150
+ source: str = "auto",
151
+ ) -> list[dict]:
152
+ """Bulk lookup — multiple queries of any type in one call.
153
+
154
+ Args:
155
+ names: List of "Name; Location" strings.
156
+ addresses: List of "Street; City, ST ZIP" strings.
157
+ phones: List of phone numbers.
158
+ emails: List of emails.
159
+ max_results: Max per query.
160
+
161
+ Returns:
162
+ Combined list of all person dicts.
163
+ """
164
+ input_data: dict[str, Any] = {"max_results": max_results, "source": source}
165
+ if names:
166
+ input_data["name"] = names
167
+ if addresses:
168
+ input_data["street_citystatezip"] = addresses
169
+ if phones:
170
+ input_data["phone_number"] = phones
171
+ if emails:
172
+ input_data["email"] = emails
173
+ return self._run(input_data)
@@ -0,0 +1,119 @@
1
+ Metadata-Version: 2.4
2
+ Name: apivault-skip-trace
3
+ Version: 0.1.0
4
+ Summary: Skip Trace & People Finder — search by name, address, phone or email. Returns addresses, phones, emails, relatives, aliases. Powered by Apify.
5
+ Author: apivault-labs
6
+ License: MIT
7
+ Project-URL: Homepage, https://apify.com/apivault_labs/skip-trace-people-finder
8
+ Project-URL: Documentation, https://github.com/apivault-labs/apivault-skip-trace
9
+ Project-URL: Repository, https://github.com/apivault-labs/apivault-skip-trace
10
+ Project-URL: Issues, https://github.com/apivault-labs/apivault-skip-trace/issues
11
+ Keywords: skip-trace,people-search,reverse-phone,reverse-address,public-records,lead-generation,real-estate,apify
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.8
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Software Development :: Libraries
22
+ Requires-Python: >=3.8
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: requests>=2.25.0
26
+ Dynamic: license-file
27
+
28
+ # apivault-skip-trace
29
+
30
+ Skip Trace & People Finder — Python SDK. Search by name, address, phone, or email. Returns addresses, phones, emails, relatives, aliases, and a match-confidence score.
31
+
32
+ **US public records. Real-time. No subscription. $6.50/1K lookups.**
33
+
34
+ [![PyPI](https://img.shields.io/pypi/v/apivault-skip-trace)](https://pypi.org/project/apivault-skip-trace/)
35
+ [![Python](https://img.shields.io/pypi/pyversions/apivault-skip-trace)](https://pypi.org/project/apivault-skip-trace/)
36
+
37
+ ## Install
38
+
39
+ ```bash
40
+ pip install apivault-skip-trace
41
+ ```
42
+
43
+ ## Quick Start
44
+
45
+ ```python
46
+ from apivault_skip_trace import SkipTrace
47
+
48
+ st = SkipTrace("your_apify_token") # get token at apify.com/account#/integrations
49
+
50
+ # Search by name
51
+ results = st.search_name("John Smith", location="Springfield, IL")
52
+ for person in results:
53
+ print(person["fullName"], person.get("phones"), person.get("emails"))
54
+
55
+ # Reverse phone lookup
56
+ results = st.search_phone("(202) 555-0182")
57
+
58
+ # Reverse address lookup
59
+ results = st.search_address("123 Main St", "Springfield, IL 62704")
60
+
61
+ # Reverse email lookup
62
+ results = st.search_email("jane.doe@gmail.com")
63
+
64
+ # Bulk (mixed queries in one call)
65
+ results = st.bulk_search(
66
+ names=["John Smith; IL", "Jane Doe; NY"],
67
+ phones=["2025550182"],
68
+ emails=["test@example.com"],
69
+ )
70
+ ```
71
+
72
+ ## What You Get Back
73
+
74
+ Each person dict contains:
75
+
76
+ | Field | Description |
77
+ |---|---|
78
+ | `fullName` | Full name |
79
+ | `firstName`, `lastName` | Parsed name components |
80
+ | `age`, `birthYear` | Age / birth year when available |
81
+ | `currentAddress` | Most recent address |
82
+ | `addresses` | All known addresses (current + past) |
83
+ | `phones` | Phone numbers with type (mobile/landline) |
84
+ | `emails` | Email addresses |
85
+ | `relatives` | Names of associated people |
86
+ | `aliases` | Also known as / maiden names |
87
+ | `matchScore` | Confidence score (0-100) |
88
+ | `bestEmail` | Top email (verified deliverable via MX) |
89
+
90
+ ## Pricing
91
+
92
+ - **$6.50 per 1,000 lookups** (Apify pay-per-event)
93
+ - Pay only for matches (empty results are free)
94
+ - No subscription, no monthly minimum
95
+ - Get $5 free credits at [apify.com](https://apify.com/pricing)
96
+
97
+ ## Get Your API Token
98
+
99
+ 1. Sign up at [apify.com](https://apify.com) (free)
100
+ 2. Go to [Settings → Integrations](https://console.apify.com/account#/integrations)
101
+ 3. Copy your API token
102
+
103
+ ## Use Cases
104
+
105
+ - **Real estate** — find property owners, skip trace vacant homes
106
+ - **Debt collection** — locate debtors with updated contact info
107
+ - **Sales prospecting** — enrich leads with phone + email
108
+ - **Background checks** — verify identity with addresses + relatives
109
+ - **Fraud prevention** — cross-reference provided info against public records
110
+
111
+ ## Links
112
+
113
+ - [Apify Store](https://apify.com/apivault_labs/skip-trace-people-finder) — run in browser, no code
114
+ - [API Docs](https://docs.apify.com/api/v2) — REST API reference
115
+ - [n8n Node](https://www.npmjs.com/package/n8n-nodes-apivault-skip-trace) — no-code automation
116
+
117
+ ## License
118
+
119
+ MIT
@@ -0,0 +1,7 @@
1
+ apivault_skip_trace/__init__.py,sha256=bSw8yZjlo4Shp9-TZjEZsnODNiDTm4b-A18zW1DlUYU,413
2
+ apivault_skip_trace/client.py,sha256=iyPgBocp54w6yfXTI6HFksHaPKlK6ARVGuE1eQXSuw8,5540
3
+ apivault_skip_trace-0.1.0.dist-info/licenses/LICENSE,sha256=EtTrdubDHfHJzfIbw66oo9Fc0uNSOJKdZajcLAgqjSI,1091
4
+ apivault_skip_trace-0.1.0.dist-info/METADATA,sha256=NYwRJPQcoDe59X_orWZIfF5kVvNZ5gtPLSoc5soU-JY,4385
5
+ apivault_skip_trace-0.1.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
6
+ apivault_skip_trace-0.1.0.dist-info/top_level.txt,sha256=O_7Dbq8JxPZ6lgAQcsUif5zBwko0Vg9CsJjMtYukLsM,20
7
+ apivault_skip_trace-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 apivault-labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ apivault_skip_trace