PHPackages                             laravel-gtm/sumble-sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. laravel-gtm/sumble-sdk

ActiveLibrary

laravel-gtm/sumble-sdk
======================

Laravel-ready PHP SDK for the Sumble v9 API, built with Saloon.

v0.1.1(1mo ago)067↓62.5%MITPHPPHP ^8.4CI passing

Since Jul 13Pushed 1mo agoCompare

[ Source](https://github.com/laravel-gtm/sumble-api-sdk)[ Packagist](https://packagist.org/packages/laravel-gtm/sumble-sdk)[ RSS](/packages/laravel-gtm-sumble-sdk/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (18)Versions (4)Used By (0)

Sumble SDK
==========

[](#sumble-sdk)

A Laravel-ready PHP SDK for the [Sumble](https://sumble.com) v9 API, built with [Saloon](https://docs.saloon.dev/) v4.

The SDK wraps every documented v9 endpoint:

- **Organizations** — resolve companies by domain/name/id or search by technology, job function, industry, and firmographics; compose exactly which attributes and per-entity metrics return; retrieve recent organization signals and AI intelligence briefs.
- **People** (async) — resolve people by id/LinkedIn/email or search within organizations; compose attributes including contact reveals (email, phone) and inferred managers/direct reports.
- **Job posts** — resolve jobs by id or search by organization and filters; full descriptions, extracted technologies/teams/functions/projects, and scored hiring managers.
- **Teams** — resolve or search teams with breadcrumbs, ICP fit scores, related people, and their job posts.
- **Lookups** — technologies, technology categories, projects, and job-title → function/level classification.
- **Signals** — filtered signal feeds and AI Priority Signals digests.
- **Lists** — organization and contact list management.
- **Support** — data-quality reports and support requests.

Requirements
------------

[](#requirements)

- PHP `^8.4`
- Laravel `^11.0 || ^12.0 || ^13.0` (for the optional Laravel integration)

Installation
------------

[](#installation)

```
composer require laravel-gtm/sumble-sdk
```

### Configuration (Laravel)

[](#configuration-laravel)

Publish the config:

```
php artisan vendor:publish --tag=sumble-sdk-config
```

Environment keys (Sumble authenticates with a Bearer token):

```
SUMBLE_TOKEN=your-sumble-api-token
SUMBLE_BASE_URL=https://api.sumble.com/v9   # optional; this is the default

```

Usage
-----

[](#usage)

### Resolving the SDK

[](#resolving-the-sdk)

```
use LaravelGtm\SumbleSdk\SumbleSdk;

// Via the service container (recommended)
$sdk = app(SumbleSdk::class);

// Standalone
$sdk = SumbleSdk::make(token: 'your-sumble-api-token');
```

Endpoints are grouped into resources — `organizations()`, `people()`, `jobs()`, `teams()`, `technologies()`, `projects()`, `signals()`, `organizationLists()`, `contactLists()`, and `support()`. Every response DTO exposes `creditsUsed`and `creditsRemaining`.

### Look up an account

[](#look-up-an-account)

```
use LaravelGtm\SumbleSdk\Enums\EntityType;
use LaravelGtm\SumbleSdk\Enums\OrganizationAttribute;
use LaravelGtm\SumbleSdk\ValueObjects\EntitySelection;

$response = $sdk->findAccountByDomain('laravel.com',
    attributes: [OrganizationAttribute::Name, OrganizationAttribute::EmployeeCount],
    entities: [new EntitySelection(EntityType::Technology, 'laravel', ['job_post_count'])],
);

$row = $response->organizations[0] ?? null;
$name = $row?->attributes?->name;
$laravelJobPosts = $row->entities[0]->jobPostCount ?? null;
```

### Search organizations by tech stack

[](#search-organizations-by-tech-stack)

```
$response = $sdk->organizations()->search(
    "technology EQ 'kubernetes' AND employee_count GT 1000",
    attributes: [OrganizationAttribute::Name, OrganizationAttribute::Industry],
    limit: 50,
);
```

### Enrich people (asynchronous)

[](#enrich-people-asynchronous)

```
use LaravelGtm\SumbleSdk\Enums\PersonAttribute;
use LaravelGtm\SumbleSdk\ValueObjects\PersonInput;

$pending = $sdk->people()->enrich(
    [PersonInput::linkedinUrl('https://www.linkedin.com/in/someone')],
    attributes: [PersonAttribute::Name, PersonAttribute::JobTitle, PersonAttribute::Email],
);

$result = $sdk->people()->wait($pending->requestId);

foreach ($result->people ?? [] as $person) {
    $email = $person->attributes?->email;
}
```

`POST /people` starts a background job in both modes; `wait()` polls until it finishes (credits are charged once, on the first successful poll). Contact attributes must be requested explicitly — they are never part of `'all'`.

### Signals and intelligence

[](#signals-and-intelligence)

```
use LaravelGtm\SumbleSdk\Enums\SignalPriority;
use LaravelGtm\SumbleSdk\ValueObjects\SignalsFilter;

$signals = $sdk->signals()->search(new SignalsFilter(
    organizationIds: [31],
    priorities: [SignalPriority::High],
));

$brief = $sdk->organizations()->intelligenceBrief(31);
if ($brief->pending) {
    // retry after $brief->retryAfterSeconds
}
```

Notes
-----

[](#notes)

- **Rate limit:** 10 requests/second across all endpoints; a `429` backs off for 60s. Errors throw (`AlwaysThrowOnErrors`); insufficient credits return HTTP `402` before any work is done.
- **Credits:** you only pay for what you `select`. Email reveal = 10 credits (first per person), phone = 80, input-email resolution = 20, intelligence brief = 50, signals = 1 per signal returned. Unmatched inputs are free.
- **Slugs first:** advanced query filters expect canonical slugs — resolve them via `$sdk->technologies()`, `$sdk->projects()`, or `$sdk->jobs()->lookupTitles()`.
- **Recency:** Sumble's organization response exposes no per-record last-updated timestamp — a recency-based trust rule against another system cannot rely on one.

Development
-----------

[](#development)

```
composer test        # Pest
composer analyse     # PHPStan (level 8)
composer lint        # Pint (check)
composer format      # Pint (fix)
```

### AI and editor rules

[](#ai-and-editor-rules)

Conventions live under [`.claude/rules/`](.claude/rules/) (`saloon.md`, `php-package-phpstan.md`, `laravel-package.md`) and are mirrored in [`.cursor/rules/`](.cursor/rules/). [Laravel Boost](https://github.com/laravel/boost)-style helpers live under [`resources/boost/`](resources/boost/):

- **`skills/sumble-sdk-development`** — every resource/method with examples, the composable select pattern, async people workflow, credit rules, and testing patterns.
- **`skills/sumble-docs-research`** — how to research the Sumble REST API through Sumble's documentation MCP server (`https://docs.sumble.com/~gitbook/mcp`) to pick the right endpoint and fields before writing code.
- **`guidelines/core.blade.php`** — condensed guidelines for agents working in consuming apps.

License
-------

[](#license)

MIT. See [LICENSE](LICENSE).

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance91

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 50% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

3

Last Release

45d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/56dcbcd0139adf900f58bc19509e785e6724dadfbfcc74f9c6769432c31686cf?d=identicon)[devethanm](/maintainers/devethanm)

---

Top Contributors

[![devethanm](https://avatars.githubusercontent.com/u/53354219?v=4)](https://github.com/devethanm "devethanm (2 commits)")[![DGarbs51](https://avatars.githubusercontent.com/u/58236685?v=4)](https://github.com/DGarbs51 "DGarbs51 (2 commits)")

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/laravel-gtm-sumble-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/laravel-gtm-sumble-sdk/health.svg)](https://phpackages.com/packages/laravel-gtm-sumble-sdk)
```

###  Alternatives

[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1226.1k](/packages/codebar-ag-laravel-docuware)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
