What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
“Generate images from Google Sheets data” can mean two different things: showing existing image files in spreadsheet cells, or turning spreadsheet data into a visual such as a chart in Google Slides. Google’s documented workflows cover both. They do not, by themselves, generate new AI artwork from prompts in spreadsheet rows.
Choose the output first: use Apps Script to insert existing images into a Sheet; use a Sheets chart in Slides for a data-driven visual. The steps below explain the difference and give you a working starting point for each.
Choose the image you want to produce
Start by identifying what the source data actually contains. A column of image URLs points to existing files. Rows of numbers and labels are data for a chart. Those inputs need different workflows.
| What you have | What you want | Use |
|---|---|---|
| URLs or image files | Images placed in spreadsheet cells | Apps Script Sheet.insertImage() |
| Labels and numeric values | A chart-based visual in a presentation | Insert a Sheets chart into Slides |
| A text prompt in each row | New AI-generated artwork | Not covered by the documented workflows here; these Google references do not establish an AI image-generation pipeline. |
The first workflow places an image on top of the Sheet grid at a row and column; it is not a formula that turns a cell value into artwork. The chart workflow uses a chart already created from spreadsheet data.
#1 Best Overall
Insert existing images into a Google Sheet
Apps Script provides Sheet.insertImage(url, column, row) for an image at a grid position. The URL must be publicly accessible to the service. A URL that only works after you sign in, or a private sharing link, should not be assumed to work as a public image URL. Google also documents a blob-based overload for images the script has as a BlobSource; blob insertion has a maximum supported size of 2 MB. See Google’s Sheet Apps Script reference.
Prepare the Sheet
- Put an image URL in each row of a column, for example in column A, and keep the corresponding label or record in another column.
- Open the spreadsheet, choose Extensions → Apps Script, and add a function that reads the URLs and inserts images at the desired grid positions.
- Save and run the function. The first run prompts you to authorize access; the scopes depend on the spreadsheet operation.
- Check the resulting image positions and access permissions. If a URL is private or unavailable to the script, provide an accessible URL or use a blob you can retrieve, subject to the 2 MB limit.
Example: insert images from a URL column
This example expects URLs in column A starting at row 2, and inserts each image at column B on the same row. Change the sheet name and columns to fit your spreadsheet.
function insertImagesFromUrlColumn() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
const firstRow = 2;
const urlColumn = 1; // A
const imageColumn = 2; // B
const lastRow = sheet.getLastRow();
if (lastRow < firstRow) return;
const urls = sheet
.getRange(firstRow, urlColumn, lastRow - firstRow + 1, 1)
.getValues();
urls.forEach((row, index) => {
const url = row[0];
if (typeof url === 'string' && url.trim() !== '') {
sheet.insertImage(url.trim(), imageColumn, firstRow + index);
}
});
}
The image is positioned at the specified cell coordinates. This example does not resize rows or columns, validate whether each URL serves an image, or remove images from a previous run. Test it on a copy first if you may rerun it, so you can inspect the result before creating duplicate images.
Rank #2
Use a blob when the image is not publicly served
If the script can obtain the image as a blob from an authorized source, use the documented blob overload rather than pretending a private URL is public. The blob insertion limit is 2 MB. How to retrieve a blob depends on where the file is stored and what access the script has, so validate that retrieval and the required authorization in your own account before building a batch workflow. The method and authorization requirements are documented in the Apps Script Sheet reference.
Turn spreadsheet data into a chart visual in Slides
If your rows contain categories and values, create a chart from that data in Sheets, then insert the chart in a Slides presentation. Apps Script’s Slides Page reference documents two different outputs: insertSheetsChart() inserts a linked chart, while insertSheetsChartAsImage() inserts an image copy. A linked chart can be updated from its source; an image copy is static. See Class Page | Apps Script.
Linked chart or static image?
| Output in Slides | Connection to source | Update behavior | Choose it when |
|---|---|---|---|
| Linked Sheets chart | Linked to the source chart; collaborators can see the source spreadsheet link. | Can be updated from the source chart. | You expect the underlying data or chart to change and want a refreshable relationship. |
| Chart inserted as image | Not linked to the source chart. | Static image copy; source changes do not update it. | You want a fixed visual rather than an updateable chart relationship. |
Google’s Workspace walkthrough describes the broader workflow of reading spreadsheet data and populating Slides, and distinguishes linked and static chart modes. For current method behavior and syntax, use the current Apps Script Page reference; the walkthrough is Generating slides from spreadsheet data.
Rank #3
Insert a chart with Apps Script
After creating a chart in Sheets, retrieve it from its sheet and insert it on a Slides page. The following function shows the key calls for the first chart on a named sheet and the first slide of a presentation. It assumes a chart exists and that you have opened the destination presentation by ID.
function insertFirstSheetChartIntoSlides() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('Data');
const charts = sheet.getCharts();
if (charts.length === 0) {
throw new Error('Create a chart on the Data sheet first.');
}
const presentation = SlidesApp.openById('YOUR_PRESENTATION_ID');
const slide = presentation.getSlides()[0];
// Linked chart: can be refreshed from its source chart.
slide.insertSheetsChart(charts[0], 40, 40, 600, 340);
// For a static image instead, use this call in place of the linked one:
// slide.insertSheetsChartAsImage(charts[0], 40, 40, 600, 340);
}
Replace YOUR_PRESENTATION_ID with the ID from your Slides URL, and ensure the spreadsheet has a chart on the named sheet. Apps Script will ask for authorization for the operations used. The appropriate scopes depend on what the script accesses; consult the method references when reviewing authorization.
Add an external image to Slides with the Slides API
If the goal is to place an existing external image in a presentation rather than make a chart, the Slides API accepts a publicly accessible image URL. The documented formats are PNG, JPEG, and GIF; files must be under 50 MB and no more than 25 megapixels. Position and dimensions are set through the page element’s size and transform properties. These are Slides API requirements, not the blob limit for Apps Script Sheet insertion. See Google’s Add images to a slide guide.
Do not conflate that API route with a private Drive image URL: the guide specifies a public URL. For a chart that should follow its spreadsheet source, use the linked-chart workflow instead of placing a detached external image.
Or skip the browser setup
If what you need is a screenshot of a webpage referenced by your sheet—not a new image generated from the sheet’s data—ScreenshotNeo can return a page capture through one GET request. It is an adjacent workflow: it captures a web page rather than converting spreadsheet rows into AI artwork or charts. Its API accepts a URL, and its other options and setup are in the ScreenshotNeo documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are not billed. Its MCP server provides screenshot tools for AI agents. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.
Troubleshoot common problems
The Sheet image does not appear
- Check URL access. Apps Script URL insertion requires a publicly accessible image URL. A signed-in browser session does not prove the script can access it.
- Check that the source is an image. A page URL that displays an image in a browser may not be a direct image URL. Confirm the endpoint serves the file to an unauthenticated request if using the URL method.
- Check authorization. Run the function as the account that has access, and complete the authorization prompt for the requested spreadsheet operations.
The blob insertion fails
- Check the blob size. Blob-based image insertion is limited to 2 MB according to the Apps Script reference.
- Check retrieval separately. Confirm the script can fetch or otherwise obtain the image as a blob before calling the insertion method. A private file needs an authorized retrieval path.
The chart in Slides does not refresh
- Check how it was inserted. A chart inserted with
insertSheetsChartAsImage()is a static image copy. Use a linked chart when the relationship to the source and refresh behavior matter. - Check source and permissions. The linked chart depends on its spreadsheet source. Collaborators can see the source spreadsheet link, so account for sharing and access when distributing the presentation.
The Slides API rejects an image
- Check the format and limits. The documented formats are PNG, JPEG, and GIF; the file must be under 50 MB and at most 25 megapixels.
- Check public access. The URL supplied to the Slides API must be publicly accessible.
- Check placement properties. The API uses size and transform properties to position the page element; make sure the request specifies both appropriately.
FAQ
Can I put the actual image inside a cell?
The Apps Script method described here inserts an image at a grid position. It is not an AI generation function or a formula described in these references.
Best Value
Will a Slides chart inserted as an image update when the spreadsheet changes?
No. The image-copy method creates a static image that is not linked to the source chart. Choose the linked-chart method if refreshability is needed.
Does this workflow generate AI images from prompts in rows?
The cited Google documentation establishes image insertion and chart workflows, not a row-driven AI artwork generator. That requires a separate image-generation service and an integration not covered here.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Recommended Free Tools

