Search by

jeffersongoncalves / laravel-semrush

jeffersongoncalves

A lightweight Semrush Analytics API client for Laravel — domain analytics, keyword research, and backlinks.

Package info

github.com/jeffersongoncalves/laravel-semrush

pkg:composer/jeffersongoncalves/laravel-semrush

Fund package maintenance!

jeffersongoncalves

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.0 2026-09-08 00:53 UTC

This package is auto-updated.

Last update: 2026-09-08 00:55:56 UTC


README

Laravel Semrush

Laravel Semrush

Tests PHPStan Code Style Latest Version on Packagist Total Downloads License

A lightweight Semrush Analytics API client for Laravel. It wraps the domain, keyword and backlink reports behind a small Semrush client/facade, threads your API key, and decodes the ;-separated CSV export into plain associative rows — no DTOs, no response wrappers.

Features

  • Domain overviewdomainOverview()
  • Domain organic keywordsdomainOrganic()
  • Domain organic competitorsdomainCompetitors()
  • Keyword overviewkeywordOverview()
  • Related keywordsrelatedKeywords()
  • Keyword difficultykeywordDifficulty()
  • Backlinks overviewbacklinksOverview()
  • Backlinks listbacklinks()
  • Semicolon-separated CSV decoded into array<int, array<string, string>>, keyed by the report's own columns
  • Semrush reports errors with HTTP 200 and an ERROR ... body — those raise SemrushException
  • A non-2xx response raises Illuminate\Http\Client\RequestException
  • Optional database/limit params are omitted from the query when left null

Installation

composer require jeffersongoncalves/laravel-semrush

Optionally publish the config file:

php artisan vendor:publish --tag="semrush-config"

Configuration

Add to your .env:

SEMRUSH_API_KEY=your-semrush-api-key
SEMRUSH_DATABASE=us

Grab a key at semrush.com/api-analytics.

Config Options

// config/semrush.php
return [
    'key' => env('SEMRUSH_API_KEY'),
    'database' => env('SEMRUSH_DATABASE', 'us'),
    'base_url' => env('SEMRUSH_BASE_URL', 'https://api.semrush.com'),
];

When semrush.key is null the client falls back to config('services.semrush.key').

Usage

Via the facade:

use JeffersonGoncalves\Semrush\Facades\Semrush;

Semrush::domainOverview('example.com');

Semrush::domainOrganic('example.com', database: 'br', limit: 50);

Semrush::domainCompetitors('example.com', limit: 20);

Semrush::keywordOverview('laravel', database: 'us');

Semrush::relatedKeywords('laravel', database: 'us', limit: 25);

Semrush::keywordDifficulty('laravel');

Semrush::backlinksOverview('example.com');

Semrush::backlinks('example.com', targetType: 'domain', limit: 100);

Or inject/resolve the underlying client:

use JeffersonGoncalves\Semrush\Semrush;

$semrush = app(Semrush::class);
$semrush->domainOverview('example.com');

Return shape

Every method returns a list of rows keyed by the report's export_columns:

Semrush::keywordOverview('laravel');

// [
//     ['Ph' => 'laravel', 'Nq' => '12100', 'Cp' => '1.35', 'Co' => '0.07', 'Nr' => '154000000'],
// ]

Values are always strings — cast them yourself where you need numbers.

Any other report

Every Semrush report type is reachable through get(), which appends the key, escapes the export and decodes the CSV for you:

Semrush::get([
    'type' => 'phrase_this',
    'phrase' => 'laravel',
    'database' => 'us',
    'export_columns' => 'Ph,Nq,Cp',
]);

Databases

us (default), br, uk, de, fr, es, … — the full list is in the Semrush docs. Set the default with SEMRUSH_DATABASE or pass database: per call.

Error handling

use Illuminate\Http\Client\RequestException;
use JeffersonGoncalves\Semrush\Exceptions\SemrushException;

try {
    $rows = Semrush::keywordOverview('laravel');
} catch (SemrushException $e) {
    // "ERROR 50 :: NOTHING FOUND", "ERROR 120 :: WRONG KEY", ...
} catch (RequestException $e) {
    // $e->response->status(), $e->response->body(), ...
}

Testing

composer test

Static Analysis

composer analyse

Code Formatting

composer format

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.