easydata-api 1.1.0__tar.gz → 1.3.0__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydata-api
3
- Version: 1.1.0
3
+ Version: 1.3.0
4
4
  Summary: Official Python client for the EasyData LinkedIn enrichment API
5
5
  Author-email: EasyData Development <dev@easydata.win>
6
6
  License-Expression: MIT
@@ -191,9 +191,16 @@ ed.account() # allowance, ceilings, secre
191
191
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
192
192
  ```
193
193
 
194
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
195
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
196
- `posts_enrich`, `sales_search_people`, `sales_search_companies`.
194
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
195
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
196
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
197
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
198
+
199
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
200
+ `include_counts=True` for follower and connection counts,
201
+ `include_experience_detail=True` for what each role actually says. Each is one
202
+ more request to LinkedIn and costs +0.5 per target, charged only when the
203
+ section answered, and at least one of them is required.
197
204
 
198
205
  ## Reference
199
206
 
@@ -170,9 +170,16 @@ ed.account() # allowance, ceilings, secre
170
170
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
171
171
  ```
172
172
 
173
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
174
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
175
- `posts_enrich`, `sales_search_people`, `sales_search_companies`.
173
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
174
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
175
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
176
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
177
+
178
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
179
+ `include_counts=True` for follower and connection counts,
180
+ `include_experience_detail=True` for what each role actually says. Each is one
181
+ more request to LinkedIn and costs +0.5 per target, charged only when the
182
+ section answered, and at least one of them is required.
176
183
 
177
184
  ## Reference
178
185
 
@@ -35,11 +35,12 @@ __all__ = [
35
35
  DEFAULT_BASE_URL = "https://api.easydata.win/v1"
36
36
 
37
37
  #: Every operation, as `attribute name -> path`. The client builds one method
38
- #: per entry rather than defining nine near-identical methods, because they ARE
39
- #: identical: one request shape, one response shape, and the operation is the
40
- #: path. A new operation is a row here.
38
+ #: per entry rather than defining one near-identical method per operation,
39
+ #: because they ARE identical: one request shape, one response shape, and the
40
+ #: operation is the path. A new operation is a row here.
41
41
  OPERATIONS: dict[str, str] = {
42
42
  "profiles_enrich": "/profiles/enrich",
43
+ "profiles_enrich_detailed": "/profiles/enrich/detailed",
43
44
  "profiles_activity": "/profiles/activity",
44
45
  "profiles_posts": "/profiles/posts",
45
46
  "profiles_comments": "/profiles/comments",
@@ -47,6 +48,7 @@ OPERATIONS: dict[str, str] = {
47
48
  "companies_enrich": "/companies/enrich",
48
49
  "posts_enrich": "/posts/enrich",
49
50
  "sales_search_people": "/sales/search/people",
51
+ "sales_search_employees": "/sales/search/employees",
50
52
  "sales_search_companies": "/sales/search/companies",
51
53
  }
52
54
 
@@ -314,6 +316,8 @@ class EasyData:
314
316
  max_results: int | None = None,
315
317
  enrich: bool | None = None,
316
318
  find_emails: bool | None = None,
319
+ include_counts: bool | None = None,
320
+ include_experience_detail: bool | None = None,
317
321
  include_results: bool | None = None,
318
322
  idempotency_key: str | None = None,
319
323
  ) -> Batch:
@@ -321,6 +325,18 @@ class EasyData:
321
325
 
322
326
  A batch of one is a batch. There is no separate single-target path and
323
327
  no ceiling to discover between one target and fifty thousand.
328
+
329
+ With ``find_emails`` the addresses are looked up after the scraping, so
330
+ results carrying one arrive minutes later than results that do not. Each
331
+ entry still appears exactly once, complete, and the batch is not
332
+ ``completed`` until every one has.
333
+
334
+ ``include_counts`` and ``include_experience_detail`` are the optional
335
+ sections of ``profiles_enrich_detailed`` and are refused with a 400 on
336
+ anything else. Each is one more request to LinkedIn and costs +0.5 per
337
+ target, charged only when the section actually answered; at least one of
338
+ them is required on that operation, because with neither set it is
339
+ ``profiles_enrich``, which returns the same record for less.
324
340
  """
325
341
  if not targets:
326
342
  raise ValueError("targets is empty: a batch needs at least one target")
@@ -328,7 +344,9 @@ class EasyData:
328
344
  body: dict[str, Any] = {"targets": list(targets)}
329
345
  _put(body, external_id=external_id, callback_url=callback_url,
330
346
  webhook_tag=webhook_tag, max_results=max_results, enrich=enrich,
331
- find_emails=find_emails, include_results=include_results)
347
+ find_emails=find_emails, include_counts=include_counts,
348
+ include_experience_detail=include_experience_detail,
349
+ include_results=include_results)
332
350
 
333
351
  data = self._request(
334
352
  "POST", path, body=body,
@@ -346,6 +364,9 @@ class EasyData:
346
364
  *,
347
365
  external_id: str | None = None,
348
366
  max_results: int | None = None,
367
+ find_emails: bool | None = None,
368
+ include_counts: bool | None = None,
369
+ include_experience_detail: bool | None = None,
349
370
  idempotency_key: str | None = None,
350
371
  ) -> SyncResult:
351
372
  """One entity, answered in this response, at twice the credits.
@@ -353,6 +374,12 @@ class EasyData:
353
374
  `target`, singular - not a list of one. The bounds are refusals rather
354
375
  than downgrades: no `enrich`, no webhooks, and one upstream page for a
355
376
  paged operation.
377
+
378
+ The optional sections are allowed - a section is one bounded extra
379
+ request, which is what this path is for - and priced like everything
380
+ else here, at double: +1 each. So is ``find_emails`` for a profile, at
381
+ +8: one person is one bounded lookup. It is refused on a search, where
382
+ it would be one lookup per row inside a single HTTP request.
356
383
  """
357
384
  if isinstance(target, (list, tuple, set)):
358
385
  raise ValueError(
@@ -360,7 +387,9 @@ class EasyData:
360
387
  )
361
388
 
362
389
  body: dict[str, Any] = {"target": target}
363
- _put(body, external_id=external_id, max_results=max_results)
390
+ _put(body, external_id=external_id, max_results=max_results,
391
+ find_emails=find_emails, include_counts=include_counts,
392
+ include_experience_detail=include_experience_detail)
364
393
 
365
394
  data = self._request(
366
395
  "POST", path + "/sync", body=body,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easydata-api
3
- Version: 1.1.0
3
+ Version: 1.3.0
4
4
  Summary: Official Python client for the EasyData LinkedIn enrichment API
5
5
  Author-email: EasyData Development <dev@easydata.win>
6
6
  License-Expression: MIT
@@ -191,9 +191,16 @@ ed.account() # allowance, ceilings, secre
191
191
  ed.usage(from_="2026-09-01", to="2026-09-30") # spend by day and operation
192
192
  ```
193
193
 
194
- Operations are attributes: `profiles_enrich`, `profiles_activity`,
195
- `profiles_posts`, `profiles_comments`, `profiles_reactions`, `companies_enrich`,
196
- `posts_enrich`, `sales_search_people`, `sales_search_companies`.
194
+ Operations are attributes: `profiles_enrich`, `profiles_enrich_detailed`,
195
+ `profiles_activity`, `profiles_posts`, `profiles_comments`,
196
+ `profiles_reactions`, `companies_enrich`, `posts_enrich`,
197
+ `sales_search_people`, `sales_search_employees`, `sales_search_companies`.
198
+
199
+ `profiles_enrich_detailed` is `profiles_enrich` plus the optional sections -
200
+ `include_counts=True` for follower and connection counts,
201
+ `include_experience_detail=True` for what each role actually says. Each is one
202
+ more request to LinkedIn and costs +0.5 per target, charged only when the
203
+ section answered, and at least one of them is required.
197
204
 
198
205
  ## Reference
199
206
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "easydata-api"
7
- version = "1.1.0"
7
+ version = "1.3.0"
8
8
  description = "Official Python client for the EasyData LinkedIn enrichment API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
File without changes
File without changes