Advertisers → Google Sheets overview

Import advertiser and affiliate program records into Google Sheets with Google Apps Script. Filter by name, network, country, or status, paginate results, and write a clean Advertisers tab using paste-ready code.

Endpoint: GET /api/v1/advertisers

Advertiser list responses use JSON:API data arrays. Edit QUERY, NETWORK_SLUG, COUNTRY, and STATUS at the top of the importer before running.

Setup in Google Sheets

  1. Open a Google Sheet → ExtensionsApps Script.
  2. Get your personal API key from API key docs. Prefer the X-Api-Key header (these samples already do).
  3. In Apps Script, open Project SettingsScript properties and add HIENERGY_API_KEY with your key value.
  4. Paste the shared client library, then the resource import script below.
  5. Click Save, reload the Sheet, and run the import from the Hi Energy AI menu (or Run in the editor).
  6. On first run, authorize the script when Google prompts for UrlFetchApp / external request permission.

1. Shared Apps Script client

Paste this helper library into your Apps Script project once. Every Hi Energy Google Sheets importer on this site reuses the same UrlFetchApp client, JSON:API flattener, and sheet writer.

/**
 * Hi Energy AI — shared Google Apps Script client
 * Paste this into Extensions → Apps Script, then add a resource script below.
 *
 * Setup:
 * 1. File → Project properties → Script properties
 * 2. Add property HIENERGY_API_KEY = your personal API key
 *    (from https://app.hienergy.ai/api_documentation/api_key)
 * 3. Optionally override HIENERGY_API_BASE if you use a custom host
 */

var HIENERGY_API_BASE = 'https://app.hienergy.ai';

function getHiEnergyApiKey_() {
  var key = PropertiesService.getScriptProperties().getProperty('HIENERGY_API_KEY');
  if (!key) {
    throw new Error(
      'Missing Script Property HIENERGY_API_KEY. ' +
      'Open Project Settings → Script properties and add your API key.'
    );
  }
  return key;
}

function hiEnergyApiGet_(path, query) {
  var url = HIENERGY_API_BASE + path;
  var params = [];
  Object.keys(query || {}).forEach(function(key) {
    var value = query[key];
    if (value === null || value === undefined || value === '') return;
    params.push(encodeURIComponent(key) + '=' + encodeURIComponent(String(value)));
  });
  if (params.length) url += '?' + params.join('&');

  var response = UrlFetchApp.fetch(url, {
    method: 'get',
    headers: {
      'X-Api-Key': getHiEnergyApiKey_(),
      'Accept': 'application/json'
    },
    muteHttpExceptions: true,
    followRedirects: true
  });

  var code = response.getResponseCode();
  var body = response.getContentText();
  var json = null;
  try { json = JSON.parse(body); } catch (e) {}

  if (code < 200 || code >= 300) {
    var message = (json && (json.error || json.message)) || body;
    throw new Error('Hi Energy AI API HTTP ' + code + ': ' + message);
  }
  return json;
}

function flattenJsonApiItem_(item) {
  var row = {};
  if (!item || typeof item !== 'object') return row;
  if (item.id !== undefined) row.id = item.id;
  if (item.type !== undefined) row.type = item.type;
  var attrs = item.attributes || {};
  Object.keys(attrs).forEach(function(key) {
    var value = attrs[key];
    row[key] = (value !== null && typeof value === 'object') ? JSON.stringify(value) : value;
  });
  return row;
}

function extractJsonApiCollection_(payload, preferredKeys) {
  if (!payload) return [];
  var keys = preferredKeys || ['data'];
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var node = payload[key];
    if (Array.isArray(node)) return node;
    if (node && Array.isArray(node.data)) return node.data;
  }
  if (Array.isArray(payload.data)) return payload.data;
  return [];
}

function uniqueHeaders_(rows) {
  var seen = {};
  var headers = [];
  rows.forEach(function(row) {
    Object.keys(row).forEach(function(key) {
      if (!seen[key]) {
        seen[key] = true;
        headers.push(key);
      }
    });
  });
  return headers;
}

function writeObjectsToSheet_(sheetName, rows, clearSheet) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName) || ss.insertSheet(sheetName);
  if (clearSheet !== false) sheet.clearContents();

  if (!rows.length) {
    sheet.getRange(1, 1).setValue('No rows returned');
    return 0;
  }

  var headers = uniqueHeaders_(rows);
  var values = [headers].concat(rows.map(function(row) {
    return headers.map(function(header) {
      var value = row[header];
      return value === undefined || value === null ? '' : value;
    });
  }));

  sheet.getRange(1, 1, values.length, headers.length).setValues(values);
  sheet.setFrozenRows(1);
  return rows.length;
}

function isoDateDaysAgo_(days) {
  var date = new Date();
  date.setDate(date.getDate() - days);
  return Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy-MM-dd');
}

function isoDateToday_() {
  return Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd');
}

2. Advertisers import script

Paste this below the shared client, save the project, then run the import function (or use the Hi Energy AI custom menu after reloading the sheet).

/**
 * Import advertisers / affiliate programs into Google Sheets.
 * Requires the shared Hi Energy client helpers in this Apps Script project.
 *
 * Tip: set QUERY / NETWORK_SLUG / COUNTRY below before running.
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Hi Energy AI')
    .addItem('Import advertisers', 'importHiEnergyAdvertisers')
    .addToUi();
}

function importHiEnergyAdvertisers() {
  var QUERY = '';          // e.g. 'nike'
  var NETWORK_SLUG = '';   // e.g. 'awin', 'cj', 'impact' (use network for exact network name)
  var COUNTRY = '';        // e.g. 'US'
  var STATUS = 'approved'; // leave blank for all statuses you can see

  var page = 1;
  var perPage = 100;
  var allRows = [];
  var maxPages = 20;

  while (page <= maxPages) {
    var payload = hiEnergyApiGet_('/api/v1/advertisers', {
      q: QUERY,
      network_slug: NETWORK_SLUG,
      country: COUNTRY,
      status: STATUS,
      page: page,
      per_page: perPage
    });

    var records = extractJsonApiCollection_(payload, ['data']);
    if (!records.length) break;

    records.forEach(function(item) {
      allRows.push(flattenJsonApiItem_(item));
    });

    if (records.length < perPage) break;
    page += 1;
  }

  var count = writeObjectsToSheet_('Advertisers', allRows, true);
  SpreadsheetApp.getActiveSpreadsheet().toast('Imported ' + count + ' advertisers', 'Hi Energy AI', 5);
}

Useful query parameters

Parameter Purpose
q / name Search advertisers by program or brand name.
domain / url Find programs by website domain.
network Exact network name filter (case-insensitive).
network_slug Network slug filter such as awin, cj, or impact (preferred for short codes).
country Geo filter for advertiser / market targeting.
status Affiliation status: not_applied, applied, approved, rejected, stopped, or unknown.
vertical Industry / vertical category filter.
page / per_page Offset pagination used by the sample importer.

FAQ

Yes. These Apps Script samples call GET /api/v1/advertisers with your API key and write flattened JSON:API attributes into an Advertisers sheet.

Edit NETWORK_SLUG and COUNTRY in importHiEnergyAdvertisers before running. NETWORK_SLUG maps to the advertisers API network_slug parameter (for example awin or impact). Use the network parameter instead when you have an exact network name.

Yes. The sheet importer uses the live REST endpoint documented on the Advertisers API page, scoped to your account permissions.

Yes. Set domain or url filters in the importer (or use the q / name search) to find affiliate programs by website. Combine with network, country, status, or vertical as needed.

Yes. The sample walks page / per_page until a short page is returned so large network inventories still land in the Advertisers tab.

Yes. This page publishes TechArticle, HowTo, FAQPage, BreadcrumbList, WebSite SearchAction, and related endpoint ItemList structured data for answer engines.
Ask Dex AIIntegration help

If this page feels TLDR, ask Dex AI.

Dex AI speaks your language, and all the other languages you may not. It will write the integration for you with the right endpoint and headers in one plain-English answer.