PHPackages                             zeek/laravel-googleads - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. zeek/laravel-googleads

AbandonedArchivedLibrary[Utility &amp; Helpers](/categories/utility)

zeek/laravel-googleads
======================

Simplifies using the google-ads-php client library and Google Ads Query Language in Laravel.

67PHP

Since Mar 1Pushed 2y ago1 watchersCompare

[ Source](https://github.com/ZeekInteractive/laravel-googleads)[ Packagist](https://packagist.org/packages/zeek/laravel-googleads)[ RSS](/packages/zeek-laravel-googleads/feed)WikiDiscussions main Synced 2d ago

READMEChangelogDependenciesVersions (1)Used By (0)

laravel-googleads
=================

[](#laravel-googleads)

Simplifies using the google-ads-php client library and Google Ads Query Language in Laravel

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

[](#installation)

```
composer require zeek/laravel-googleads
```

Configuration
-------------

[](#configuration)

```
php artisan vendor:publish --provider="Zeek\GoogleAds\GoogleAdsServiceProvider"
```

Modify the `config/googleads.php` file to include your Google Ads credentials and other settings. You will need the following:

- `developerToken` - Your Google Ads developer token, see  &amp;
- `clientId` &amp; `clientSecret` - Your Google API Console OAuth2 Client ID &amp; Secret, see
- `refreshToken` - The refresh token for the account you to access, see the usage example below for how you can use Socialite to obtain this.
- `clientCustomerId` - The customer ID of the account you want to access, see

> **WARNING**: The Developer Token will be PERMANENTLY associated with the OAuth2 Client ID upon first use. If you need to change the Developer Token you will need to create a new Google Cloud Project &amp; new OAuth2 credentials.

> **NOTE:** Ensure that your Google Cloud Project has the Google Ads API enabled.

Notes
-----

[](#notes)

### Google Ads does not have a read-only scope

[](#google-ads-does-not-have-a-read-only-scope)

See , the only oauth scope available is `https://www.googleapis.com/auth/adwords` which is read-write. In order to protect against accidental writes, you should use a separate Google Ads account for read-only access.

Usage
-----

[](#usage)

### Get the Google Ads client

[](#get-the-google-ads-client)

```
$googleAds = App::make('google-ads');
```

or

```
use Zeek\GoogleAds\GoogleAds;

$googleAds = new GoogleAds([
    'developerToken' => env('GOOGLE_ADS_DEVELOPER_TOKEN'),
    'clientCustomerId' => env('GOOGLE_ADS_CLIENT_CUSTOMER_ID'),
    'loginCustomerId' => env('GOOGLE_ADS_LOGIN_CUSTOMER_ID'),
    'clientId' => env('GOOGLE_ADS_CLIENT_ID'),
    'clientSecret' => env('GOOGLE_ADS_CLIENT_SECRET'),
    'refreshToken' => env('GOOGLE_ADS_REFRESH_TOKEN'),
]);
```

### List all customers that the authenticated user has access to

[](#list-all-customers-that-the-authenticated-user-has-access-to)

```
$ads = new GoogleAds([
    'clientId' => config('services.google.client_id'),
    'clientSecret' => config('services.google.client_secret'),
    'developerToken' => config('services.google.ads_dev_token'),
    'refreshToken' => $user->google_refresh_token,
]);

$ads->listCustomers(); // ['customerId' => 'Descriptive Name']
```

### Google Ads Query Language

[](#google-ads-query-language)

> **NOTE:** This is not implemented yet.

```
$googleAds = App::make('google-ads');
$googleAds->query('SELECT campaign.id, campaign.name FROM campaign');
```

### Use Socialite to obtain a refresh token

[](#use-socialite-to-obtain-a-refresh-token)

[Laravel Socialite](https://laravel.com/docs/10.x/socialite) makes it easy to work with OAuth providers. Here's an example of how you can use it to obtain a refresh token for a Google Ads account:

> **NOTE:** Ensure that your application hostname is added to the Authorized JavaScript origins in the Google API Console and that the redirect URI is added to the Authorized redirect URIs. (i.e. `https://example.com` and `https://example.com/oauth-redirect`)

`routes/web.php`:

```
Route::get('google-auth', [GoogleController::class, 'redirectToGoogle'])
    ->name('google-auth.init');

Route::get('oauth-redirect', [GoogleController::class, 'handleGoogleCallback']);
```

`App\Http\Controllers\GoogleController.php`:

> **NOTE:** `Record` is a model where you will be storing your refresh token.

```
class GoogleController extends Controller
{
    /**
     * Create a new controller instance.
     */
    public function redirectToGoogle(Request $request, Record $record)
    {
        $driver = Socialite::driver('google');

        $driver->scopes($this->getScopes())
            ->with([
                'access_type' => 'offline',
                'prompt'      => 'consent select_account',
            ]);

        Session::put('record_id', $record->id);
        Session::forget('google-connection-error');

        return $driver->redirect();
    }

    public function handleGoogleCallback(Request $request)
    {
        $record = Record::find(Session::get('record_id'));

        try {
            $driver = Socialite::driver('google');
            $oauth  = $driver->user();

            // Update record info with oauth provider's info
            $campaign->update([
                'google_id'            => $oauth->id,
                'google_refresh_token' => $oauth->refreshToken,
            ]);
        } catch (ClientException $e) {
        }

        Session::forget('google-connection-error');
        return redirect(route('records.edit', $record))->with('status', 'Select your Google Ads customer account.');
    }

    private function getScopes(): array
    {
        return [
            'https://www.googleapis.com/auth/adwords',
        ];
    }
}
```

Related Resources:
------------------

[](#related-resources)

- [Google Ads API PHP Client Library](https://github.com/googleads/google-ads-php) &amp; [Documentation](https://developers.google.com/google-ads/api/docs/client-libs/php)
- [Google Ads Query Language](https://developers.google.com/google-ads/api/docs/query/overview)
- [Google Ads API PHP Client Library Examples](https://github.com/googleads/google-ads-php/tree/main/examples)

###  Health Score

15

—

LowBetter than 3% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity19

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/7253840?v=4)[Luke Towers](/maintainers/LukeTowers)[@LukeTowers](https://github.com/LukeTowers)

![](https://www.gravatar.com/avatar/ccbbf38682dffd105e547ab9ced04036a980e7c1a256466f249ecc9463eb92b0?d=identicon)[zeek](/maintainers/zeek)

---

Top Contributors

[![LukeTowers](https://avatars.githubusercontent.com/u/7253840?v=4)](https://github.com/LukeTowers "LukeTowers (15 commits)")

---

Tags

gaqlgaql-buildergoogle-adsgoogle-ads-apilaravellaravel-package

### Embed Badge

![Health badge](/badges/zeek-laravel-googleads/health.svg)

```
[![Health](https://phpackages.com/badges/zeek-laravel-googleads/health.svg)](https://phpackages.com/packages/zeek-laravel-googleads)
```

###  Alternatives

[prestashop/ps_googleanalytics

PrestaShop module ps\_googleanalytics

427.0M4](/packages/prestashop-ps-googleanalytics)[maher/laravel-counters

management for counters in laravel system

4512.9k](/packages/maher-laravel-counters)[eduardovillao/wp-since

Check WordPress plugin compatibility by analyzing used functions, classes, hooks and comparing against the minimum required WP version.

783.9k](/packages/eduardovillao-wp-since)

PHPackages © 2026

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