Skip to content
PG Pulse
PG Pulse

Try searching for

Local knowledge for your AI tools

Connect Cursor, VS Code, Codex or Claude Code. Free MCP access, no key needed.

Connect your AI assistant
View as MarkdownFree, no key needed

City spending: API reference

8 endpoints. Base URL https://princegeorgepulse.ca/api/v1. Conventions (envelope, paging, fields, formats, limits) are on the overview. All endpoints.

GET /api/v1/spending #

City spending and pay at a glance: totals by year for suppliers, grants, contract awards, council and staff pay.

One row per fiscal year with the count and total of payments to suppliers and grants over the reporting threshold, contract awards (by award date), mayor and council pay and expenses, and staff paid over the threshold (count, total, median). datasets says where each table comes from, when the City last edited it, the latest year it holds and whether a year that should be out by now is missing (behind). The City publishes the statement of financial information once a year.

Also accepts fields (sparse fieldset) and format (json, md).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending"

Example response (trimmed)

json
{
  "data": {
    "years": [
      {
        "year": 2025,
        "suppliers": {
          "count": 374,
          "total": 233820917
        },
        "grants": {
          "count": 17,
          "total": 6487687
        },
        "contracts": {
          "count": 68,
          "total": 24518577
        },
        "council": null,
        "staff": null
      },
      {
        "year": 2024,
        "suppliers": {
          "count": 380,
          "total": 214327827
        },
        "grants": {
          "count": 12,
          "total": 5575787
        },
        "contracts": {
          "count": 99,
          "total": 35849508
        },
        "council": null,
        "staff": null
      },
      "… 10 more"
    ],
    "datasets": [
      {
        "id": "suppliers",
        "title": "Payments to suppliers",
        "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::suppliers-awards-over-25k-1",
        "editedAt": "2026-07-23T22:30:29.121Z",
        "rows": 4088,
        "firstYear": 2014,
        "latestYear": 2025,
        "expectedYear": 2025,
        "behind": false,
        "fetchedAt": "2026-10-02T03:12:41.121Z",
        "checkedAt": "2026-10-11T11:35:07.443Z",
        "error": null
      },
      {
        "id": "grants",
        "title": "Grants and contributions",
        "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::supplier-grants-over-25k",
        "editedAt": "2026-07-23T22:21:04.338Z",
        "rows": 171,
        "firstYear": 2014,
        "latestYear": 2025,
        "expectedYear": 2025,
        "behind": false,
        "fetchedAt": "2026-10-02T03:12:41.121Z",
        "checkedAt": "2026-10-11T11:35:07.443Z",
        "error": null
      },
      "… 4 more"
    ],
    "thresholds": {
      "suppliers": 25000,
      "grants": 25000,
      "staff": 75000
    },
    "links": {
      "reports": "https://www.princegeorge.ca/city-hall/annual-report-strategic-plan-corporate-plan",
      "bidding": "https://www.princegeorge.ca/business-development/bidding-opportunities",
      "page": "/spending/"
    }
  },
  "meta": {
    "source": "City of Prince George open data: statement of financial information (suppliers, grants, remuneration), contract awards, council by year",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/",
    "updatedAt": "2026-10-11T11:35:08.791Z",
    "ageSec": 429196,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George open data: statement of financial information (suppliers, grants, remuneration), contract awards, council by year, via PG Pulse (princegeorgepulse.ca)"
  },
  "links": {
    "self": "/api/v1/spending",
    "next": null,
    "docs": "/developers/reference/city-spending/#get-spending"
  }
}

GET /api/v1/spending/suppliers #

Payments to suppliers over $25,000 by year, as the City reports them.

Every supplier the City paid more than $25,000 in a fiscal year, from the statement of financial information it publishes each year. total is the City’s total for the year (amount by cheque or transfer, card by purchasing card, when split). group=true returns one row per supplier with the total across years (newest years first in byYear). Names are as the City publishes them.

ParameterInTypeDescription
qquerystringWords in the name. Example: Paving.
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
groupquerybooleanOne row per name, totalled across years.
sortquerystringamount (default: year, then largest first) or name. One of: amount, name.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/suppliers"

Example response (trimmed)

json
{
  "data": [
    {
      "name": "Receiver General for Canada",
      "year": 2025,
      "total": 56058609.24,
      "amount": null,
      "card": null
    },
    {
      "name": "Minister of Finance",
      "year": 2025,
      "total": 22055957.64,
      "amount": null,
      "card": null
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: payments to suppliers (statement of financial information)",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::suppliers-awards-over-25k-1",
    "updatedAt": "2026-10-02T03:12:41.121Z",
    "ageSec": 1236944,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2025,
    "firstYear": 2014,
    "cityEditedAt": "2026-07-23T22:30:29.121Z",
    "behind": false,
    "expectedYear": 2025,
    "total": 4088,
    "…": "3 more keys"
  },
  "links": {
    "self": "/api/v1/spending/suppliers",
    "next": "/api/v1/spending/suppliers?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-suppliers"
  }
}

GET /api/v1/spending/grants #

Grants and contributions over $25,000 by year, as the City reports them.

Every grant recipient the City paid more than $25,000 in a fiscal year, from the statement of financial information it publishes each year. total is the City’s total for the year (amount by cheque or transfer, card by purchasing card, when split). group=true returns one row per recipient with the total across years (newest years first in byYear). Names are as the City publishes them.

ParameterInTypeDescription
qquerystringWords in the name. Example: Society.
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
groupquerybooleanOne row per name, totalled across years.
sortquerystringamount (default: year, then largest first) or name. One of: amount, name.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/grants"

Example response (trimmed)

json
{
  "data": [
    {
      "name": "PG Public Library",
      "year": 2025,
      "total": 4401235.95,
      "amount": null,
      "card": null
    },
    {
      "name": "Theatre North West Society",
      "year": 2025,
      "total": 466130,
      "amount": null,
      "card": null
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: grants and contributions (statement of financial information)",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::supplier-grants-over-25k",
    "updatedAt": "2026-10-02T03:12:41.121Z",
    "ageSec": 1236944,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2025,
    "firstYear": 2014,
    "cityEditedAt": "2026-07-23T22:21:04.338Z",
    "behind": false,
    "expectedYear": 2025,
    "total": 171,
    "…": "3 more keys"
  },
  "links": {
    "self": "/api/v1/spending/grants",
    "next": "/api/v1/spending/grants?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-grants"
  }
}

GET /api/v1/spending/contracts #

Contracts the City awarded: bid number, method, description, vendor, amount and date, newest first.

The City’s procurement contract awards. method puts the City’s own process label (process) in plain words: Pre-qualification, Standing offer, Request for proposals, Tender, Request for quotations, Direct award (exemption), Rotational list, Expression of interest, Supply agreement, Extension, Other, Not stated. extension marks extensions of earlier awards. A few awards have no date or amount in the source.

  • Cache: 6 h
  • Source: City of Prince George: procurement contract awards
  • Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)
  • Paginated: limit (default 50, max 500) and offset; also format=csv
ParameterInTypeDescription
qquerystringWords in the bid number, description or vendor. Example: snow.
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
methodquerystringPlain-words method. One of: Pre-qualification, Standing offer, Request for proposals, Tender, Request for quotations, Direct award (exemption), Rotational list, Expression of interest, Supply agreement, Extension, Other, Not stated.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/contracts"

Example response (trimmed)

json
{
  "data": [
    {
      "bid": "X25-091",
      "description": "Prince George Fire Rescue Wellness Program",
      "vendor": "Fire Health Services Ltd; JS Consulting",
      "amount": 70000,
      "awardedOn": "2025-06-27",
      "year": 2025,
      "method": "Direct award (exemption)",
      "process": "Exemption",
      "extension": false
    },
    {
      "bid": "P22-050*",
      "description": "Secruity Services Opt Yr 1",
      "vendor": "Paladin Security Groups Ltd",
      "amount": 295890.24,
      "awardedOn": "2025-06-27",
      "year": 2025,
      "method": "Request for proposals",
      "process": "Request for Proposal",
      "extension": false
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: procurement contract awards",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::procurement-contract-awards",
    "updatedAt": "2026-10-02T03:12:04.155Z",
    "ageSec": 1236981,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2025,
    "firstYear": 2015,
    "cityEditedAt": "2025-08-15T15:25:54.436Z",
    "behind": false,
    "expectedYear": null,
    "methods": [
      {
        "method": "Request for proposals",
        "count": 354,
        "total": 156368751
      },
      {
        "method": "Tender",
        "count": 224,
        "total": 104204781
      },
      "… 8 more"
    ],
    "…": "4 more keys"
  },
  "links": {
    "self": "/api/v1/spending/contracts",
    "next": "/api/v1/spending/contracts?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-contracts"
  }
}

GET /api/v1/spending/remuneration/council #

Mayor and council pay, vehicle allowance, expenses and benefits by year.

As reported in the City’s statement of financial information: payTaxable and payNonTaxable (the City labels these taxable and non-taxable remuneration), vehicle allowance, total as the City publishes it, then expenses and benefits. One row per person, position and year (a person who changed position in a year has two rows).

ParameterInTypeDescription
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
qquerystringWords in the name. Example: Hall.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/remuneration/council"

Example response (trimmed)

json
{
  "data": [
    {
      "year": 2022,
      "name": "Hall, Lyn FJ",
      "position": "Mayor",
      "payTaxable": 115246.66,
      "payNonTaxable": null,
      "vehicle": 7670.45,
      "total": 122917.11,
      "expenses": 9238.94,
      "benefits": 167.56,
      "contracts": null
    },
    {
      "year": 2022,
      "name": "Yu, Simon",
      "position": "Mayor",
      "payTaxable": 17865.66,
      "payNonTaxable": null,
      "vehicle": 1363.64,
      "total": 19229.3,
      "expenses": 19.77,
      "benefits": 15.36,
      "contracts": null
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: elected officials’ remuneration and expenses (statement of financial information)",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::elected-officials-remuneration",
    "updatedAt": "2026-10-02T03:12:04.155Z",
    "ageSec": 1236981,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2022,
    "firstYear": 2014,
    "cityEditedAt": "2024-01-03T18:51:14.553Z",
    "behind": true,
    "expectedYear": 2025,
    "total": 91,
    "…": "3 more keys"
  },
  "links": {
    "self": "/api/v1/spending/remuneration/council",
    "next": "/api/v1/spending/remuneration/council?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-remuneration-council"
  }
}

GET /api/v1/spending/remuneration/staff/summary #

Staff paid over the threshold: count, total, median and pay bands for a year, by department.

Aggregates of the City’s list of employees paid more than $75,000 in a fiscal year (no names). departments groups by the department or position the City lists. Defaults to the latest year published.

ParameterInTypeDescription
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.

Also accepts fields (sparse fieldset) and format (json, md).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/remuneration/staff/summary"

Example response (trimmed)

json
{
  "data": {
    "year": 2022,
    "count": 365,
    "total": 39114631,
    "median": 100436,
    "mean": 107163,
    "top": 267200,
    "bands": [
      {
        "from": 75000,
        "to": 100000,
        "count": 181
      },
      {
        "from": 100000,
        "to": 125000,
        "count": 91
      },
      "… 3 more"
    ],
    "departments": [
      {
        "department": "Firefighter",
        "count": 75,
        "total": 8891892,
        "median": 120599
      },
      {
        "department": "Fire Captain",
        "count": 17,
        "total": 2530131,
        "median": 147824
      },
      "… 178 more"
    ],
    "years": [
      {
        "year": 2022,
        "count": 365,
        "total": 39114631,
        "median": 100436
      },
      {
        "year": 2021,
        "count": 330,
        "total": 33727468,
        "median": 97369
      },
      "… 7 more"
    ]
  },
  "meta": {
    "source": "City of Prince George: employee remuneration over the threshold (statement of financial information)",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::employee-remuneration-75k",
    "updatedAt": "2026-10-02T03:12:04.155Z",
    "ageSec": 1236981,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2022,
    "firstYear": 2014,
    "cityEditedAt": "2024-01-03T19:28:53.887Z",
    "behind": true,
    "expectedYear": 2025
  },
  "links": {
    "self": "/api/v1/spending/remuneration/staff/summary",
    "next": null,
    "docs": "/developers/reference/city-spending/#get-spending-remuneration-staff-summary"
  }
}

GET /api/v1/spending/remuneration/staff #

Staff paid over the threshold by year, by name, as the City publishes them.

The City’s statutory list of employees paid more than $75,000 in a fiscal year (name, department or position as listed, remuneration, expenses), unchanged. For counts and medians use /spending/remuneration/staff/summary.

ParameterInTypeDescription
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
qquerystringWords in the name or department. Example: Fire.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/remuneration/staff"

Example response (trimmed)

json
{
  "data": [
    {
      "year": 2022,
      "name": "Babicz, Walter",
      "department": "City Manager",
      "remuneration": 267200.07,
      "expenses": 7745.35
    },
    {
      "year": 2022,
      "name": "Davey, Adam D",
      "department": "Director, Public Safety",
      "remuneration": 188675.23,
      "expenses": 1406.94
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: employee remuneration over the threshold (statement of financial information)",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::employee-remuneration-75k",
    "updatedAt": "2026-10-02T03:12:04.155Z",
    "ageSec": 1236981,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2022,
    "firstYear": 2014,
    "cityEditedAt": "2024-01-03T19:28:53.887Z",
    "behind": true,
    "expectedYear": 2025,
    "total": 2877,
    "…": "3 more keys"
  },
  "links": {
    "self": "/api/v1/spending/remuneration/staff",
    "next": "/api/v1/spending/remuneration/staff?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-remuneration-staff"
  }
}

GET /api/v1/spending/council-years #

Who sat on council each year: the mayor and councillors as the City lists them.

  • Cache: 24 h
  • Source: City of Prince George: mayor and council by year
  • Licence: Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)
  • Paginated: limit (default 50, max 200) and offset; also format=csv
ParameterInTypeDescription
yearqueryintegerFiscal year (calendar year), e.g. 2024. Example: 2024.
limitqueryintegerItems per page (default 50, max 500 unless noted). Example: 20.
offsetqueryintegerItems to skip. Use links.next to page. Example: 0.

Also accepts fields (sparse fieldset) and format (json, md, csv).

Example request

bash
curl "https://princegeorgepulse.ca/api/v1/spending/council-years"

Example response (trimmed)

json
{
  "data": [
    {
      "year": 2022,
      "mayor": "Yu, S.",
      "councillors": [
        "Skakun, B.",
        "Klassen, T.",
        "… 6 more"
      ]
    },
    {
      "year": 2021,
      "mayor": "Hall, L.",
      "councillors": [
        "Skakun, B.",
        "McConnachie, T.",
        "… 6 more"
      ]
    },
    "… 48 more"
  ],
  "meta": {
    "source": "City of Prince George: mayor and council by year",
    "sourceUrl": "https://data-cityofpg.opendata.arcgis.com/datasets/CityofPG::council-mayor-breakdown-by-year",
    "updatedAt": "2026-10-02T03:12:04.155Z",
    "ageSec": 1236981,
    "license": "Open Government Licence – City of Prince George (https://pgmapinfo.princegeorge.ca/OpenData/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf)",
    "attribution": "City of Prince George, via PG Pulse (princegeorgepulse.ca)",
    "latestYear": 2022,
    "firstYear": 1915,
    "cityEditedAt": "2023-07-26T22:23:55.620Z",
    "behind": false,
    "expectedYear": null,
    "total": 108,
    "…": "3 more keys"
  },
  "links": {
    "self": "/api/v1/spending/council-years",
    "next": "/api/v1/spending/council-years?offset=50",
    "docs": "/developers/reference/city-spending/#get-spending-council-years"
  }
}

Add PG Pulse to your home screen

Your browser installs apps from its Share menu.

  1. Tap Share in the browser toolbar (at the bottom of the screen on iPhone, at the top on iPad).
  2. Scroll down and tap Add to Home Screen.
  3. Tap Add. PG Pulse opens from its icon like any other app.