# GCP Uploader (`circ_le/gcp-uploader`) Actor

Upload datasets and KV store records to Google cloud storage

- **URL**: https://apify.com/circ\_le/gcp-uploader.md
- **Developed by:** [Cir◎cle](https://apify.com/circ_le) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 50 total users, 5 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Google cloud platform storage uploader

Actor allowing upload of both datasets and Key-value store records to the GCP Storage.

### Input

#### key

The service account key in a JSON format. You can generate this key in the Google Cloud console for each service account.

#### bucketName

Name of the bucket data will be uploaded to.

#### Dataset upload inputs:

- dataset ID - ID of the dataset to be uploaded
- fileName - the name of uploaded file, if not specified, the ID will be used

#### Key-value store records upload inputs:

- key value store ID - ID of the store to upload records from
- kvStoreRegex - if provided, only records with keys matching this regex will be uploaded to the storage
- transformFileNameFunction - javascript function, allowing transformation of the records key in the storage. The function takes one parameter - the records key and should return the new name.

# Actor input Schema

## `key` (type: `string`):

Service account key in the JSON format.

## `bucketName` (type: `string`):

No description

## `uploadPath` (type: `string`):

Path where files should be uploaded to. If not provided, files will be uploaded to the root of the bucket. Example: 'my-folder/my-subfolder'

## `datasetId` (type: `string`):

No description

## `datasetFormat` (type: `string`):

No description

## `fileName` (type: `string`):

File name to be uploaded to the bucket, otherwise the dataset ID will be used.

## `kvStoreId` (type: `string`):

No description

## `kvStoreRegex` (type: `string`):

Only records matching this regex will be uploaded to the key-value store.

## `transformFileNameFunction` (type: `string`):

Function that creates the name of the uploaded file from the record key. It receives the record key as an argument and must return the new file name.

## `compression` (type: `string`):

No description

## `uploadMetadata` (type: `boolean`):

If checked, metadata (currently only `contentType`) will be uploaded to the bucket along with the file.

## `storeEntriesToDataset` (type: `boolean`):

If checked, uploaded file entries will be stored to the Apify dataset.

## `dryRun` (type: `boolean`):

Test the GCP uploader without actually uploading anything

## Actor input object example

```json
{
  "transformFileNameFunction": "(recordKey) => recordKey",
  "uploadMetadata": true,
  "storeEntriesToDataset": true,
  "dryRun": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "transformFileNameFunction": (recordKey) => recordKey
};

// Run the Actor and wait for it to finish
const run = await client.actor("circ_le/gcp-uploader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "transformFileNameFunction": "(recordKey) => recordKey" }

# Run the Actor and wait for it to finish
run = client.actor("circ_le/gcp-uploader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "transformFileNameFunction": "(recordKey) => recordKey"
}' |
apify call circ_le/gcp-uploader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,circ_le/gcp-uploader"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xJmhChd7vpirqRu8H/builds/3GqPGa8G9B2laHwcG/openapi.json
