Google Drive
Upload, download, list, search, move, rename, delete and share files as a connected Google account.
The Google Drive app works with files in a connected Google account.
The one thing to understand first
Elizon asks Google for the narrowest Drive permission that exists: it can work with files Elizon itself created, and with files you hand it explicitly. It cannot see the rest of your Drive, and that is deliberate — the permission that can is one Google classifies as restricted, and asking for it would mean every Elizon deployment holding the keys to every file in every connected account.
So the rule is:
Drive steps can see what Elizon made. They cannot see what you made.
A folder you created in Drive yourself, and the files in it, are invisible to a Drive step. Google reports that as "File not found" rather than as "not allowed", which is misleading enough that Elizon adds the missing sentence to the error itself — if a Drive step says a file was not found and you are looking straight at it in your browser, this is why, and the id is not the problem.
How to work with it. Make Elizon the thing that creates the folder:
- Run Folder · Create a folder once, by hand, from the Run button in Studio.
- Copy the
idit answers with. - Paste that id into the Folder id field of every Drive step that should work in there.
From then on the folder and everything Elizon puts into it are visible to every Drive step in that account — including List files and Search files. You can open the folder in Drive, move things into it and share it like any other; a file you drag in yourself stays invisible to Elizon, but one Elizon wrote stays visible even after you move it.
If you genuinely need a workflow to read arbitrary existing files, use FTP / SFTP against a file server you control, or have the file sent in — a Form trigger upload or an Email trigger attachment — rather than fetched out of Drive.
What each operation is for
| Operation | What it does |
|---|---|
| File · Upload a file | Puts a file from an earlier step, or some text, into Drive. Answers with its id. |
| File · Download a file | Fetches a file's contents as a file the rest of the workflow can use. |
| File · List files | The files Elizon can see, optionally inside one folder, filtered by name or type. |
| File · Search files | Full-text search across the files Elizon can see — contents as well as names. |
| File · Move a file | Moves it to another folder, and renames it in the same step if you want. |
| File · Rename a file | Changes the name, leaves it where it is. |
| File · Delete a file | Permanent. Does not go to the trash. Deleting a folder deletes what is inside it. |
| Folder · Create a folder | A new folder. Keep the id. |
| Sharing · Share a file | Gives a person, a group, a domain, or anyone with the link access to one file. |
Delete is permanent. Drive's API deletes rather than trashes, so there is nothing to restore from. The node is flagged as a step that cannot be undone, and if you want second thoughts, Move a file into a folder you treat as a trash can is the reversible version.
Sharing cannot transfer ownership. The roles on offer go up to full control in a shared drive; handing the file to someone else is a different, irreversible operation and is not one of them.
Downloading, and Google Docs
Download a file needs a file id, and nothing else:
{{ upstream.<nodeId>.output.file }}is what it fills. result stays null, because the answer is the file.
A Google Doc, Sheet or Slides file has no contents to download — it only exists inside Google's editors. Elizon notices and exports instead, which is why there is nothing for you to set:
| The file is a | Automatic gives you | You can also ask for |
|---|---|---|
| Google Doc | Word, plain text | |
| Google Sheet | Excel | PDF, CSV (first sheet) |
| Google Slides | PowerPoint, plain text |
Leave Export Google Docs, Sheets and Slides as on Automatic unless a later step needs a particular format — an Excel file if something is going to read the numbers, a PDF if a person is going to read the document. Asking for a format a file cannot become (Word, for a spreadsheet) is refused before anything is fetched, and the message lists the ones that would have worked. Google caps an export at 10 MB; a long document that will not export is a document to split, not a setting to change.
Everything else — a PDF, an image, a ZIP, a .docx someone uploaded — is downloaded exactly as it
is.
Uploading
Two things to choose: what to upload (a file from an earlier step, or text) and where (a folder id, or nothing for the account's My Drive root).
Leave Name in Drive empty to keep the name the file already has. Leave Content type empty unless Drive should treat the bytes as something other than what they are.
Anything that produces a file can feed it: a Convert to File, an HTTP Request set to download, an FTP download, a form upload, another Drive download.
Two worked examples with Drive
Drive download → AI Prompt. Summarise a document a Drive step fetched.
- Something supplies the file id — a List files or Search files step, a Data Table row, the
trigger's payload. Say it is a Search files step called
find. - A Google Drive step called
fetch, File · Download a file, with File id set to{{ upstream.find.output.result.0.id }}. Leave the export format on Automatic, so a Google Doc arrives as a PDF and a PDF arrives as itself. - An AI Prompt step, with an Attachment row set to
{{ upstream.fetch.output.file }}and a prompt that says what to do with it — "Summarise this service report in five bullet points, and say whether it recommends a follow-up visit."
The attachment row takes the file reference as-is. Nothing is pasted into the prompt and nothing is re-read from Drive: the model is handed the file the download already stored.
Convert to File → Drive upload. Put a generated report where a person will look for it.
- Whatever the run produced — an AI Prompt answer, a Data Table query, an Edit Fields object.
- A Convert to File step called
report, format PDF, with the content you want in it. - A Google Drive step, File · Upload a file:
- What to upload — A file from an earlier step
- File (Expression) —
{{ upstream.report.output.file }} - Name in Drive (Expression) —
Service report {{ trigger.body.order_number }}.pdf - Folder id — the id of the folder you created in step 1 of "How to work with it" above
- Optionally a Sharing · Share a file step, One person / View it, with File id set to
{{ upstream.<uploadNodeId>.output.result.id }}and the address of whoever should see it.
The upload answers with the file's id and its webViewLink, so a following Send Email can
link straight to it rather than attaching the file a second time.
The New file in a folder trigger remembers the creation time of the newest file it has fired for: a file whose creation time is older than that is never fired for. See What "new" means.
Operations
The App step's own settings — account, resource, operation, and { value, valueMode } per input — are described in the Apps overview. These are this app's operations.
| Operation | What it does | Inputs (bold = required) | Permission |
|---|---|---|---|
file.upload | Upload a file | filename, source, attachment, text, contentType, folderId | — |
file.download | Download a file | fileId, filename, exportAs | — |
file.list | List files | folderId, nameContains, mimeType, includeTrashed | — |
file.search | Search files | text, folderId, includeTrashed | — |
file.move | Move a file | fileId, folderId, name | — |
file.rename | Rename a file | fileId, name | — |
file.delete | Delete a file. Cannot be undone. | fileId | — |
folder.create | Create a folder | name, folderId | — |
permission.share | Share a file. Cannot be undone. | fileId, type, role, emailAddress, domain, sendNotificationEmail | — |
Triggers
Use these on an App trigger node. It polls every pollMinutes and starts one run per new item.
| Trigger | Fires for | Inputs (bold = required) |
|---|---|---|
file-added | New file in a folder — Fires once for every file that appears in one folder, with the file itself attached. | folderId, mimeType |
Example
name: Save summary
description: Saves a summary as a text file in Drive.
graph:
nodes:
- id: start
type: trigger_manual
position: { x: 0, y: 0 }
data: { description: 'Pass summary.' }
- id: upload
type: app
position: { x: 280, y: 0 }
data:
app: google-drive
version: 1.0.0
resource: file
operation: upload
connection: google-account
inputs:
source: { value: 'text', valueMode: fixed }
text: { value: '{{ trigger.summary }}', valueMode: expression }
filename: { value: 'Summary.txt', valueMode: fixed }
folderId: { value: '1FolderIdElizonCreated', valueMode: fixed }
edges:
- { id: start-to-upload, source: start, target: upload }In a Package
The step travels whole; the account becomes a credential Slot the installer binds one of their own Google accounts to. See Apps in a Package.
slots:
- id: google-account
type: credential
scheme: oauth2
app: google
compliance:
providers: [google]- Travels:
app,version,resource,operation,inputs - Converted:
connectionId→connection(thecredentialSlot) - Never carried: none