(+91)7275894867 [email protected]
OutRightCRM Login
📅 Published on August 16, 2024 ✏️ Updated on April 22, 2025

Mistral AI Magic In Google Sheets with Free Apps Script

Author Avatar
Author
Editorial Team

Mistral AI Magic In Google Sheets with Free Apps Script

Bring Mistral AI’s magic into Google Sheets using a free Apps Script. Connect to Mistral’s API, send prompts or data from your sheet, and receive smart completions, insights, or content directly in cells. Ideal for automating tasks like writing, summarizing, or analyzing—all within your spreadsheet workflow.
  1. Step 1: Click on the Copy button to copy the code snippet.
  2. Step 2: Paste the copied code into your project’s script editor.

Apps Scripts Blog

Read Blog

Apps Scripts Code

var apiKey = 'XRqs0ATTneIjz477JWtMBSgPtylMZdto';
var url = 'https://api.mistral.ai/v1/chat/completions';




function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Mistral AI')
    .addItem('Generate Answers', 'generateAnswers')
    .addToUi();
 
  createHeader();
}
function createHeader() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var headers = ["Type Mistral prompt", "Mistral Response"];
  var headerRange = sheet.getRange('A1:B1');
  headerRange.setValues([headers]);
 
  // Apply bold font and set font size
  headerRange.setFontWeight("bold");
  headerRange.setFontSize(14); // Change the font size as needed
}


function generateAnswers() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const activeCell = sheet.getActiveCell();
  const row = activeCell.getRow();
  const column = activeCell.getColumn();


  if (column === 1) {
    const question = activeCell.getValue();
    const existingResponse = activeCell.offset(0, 1).getValue(); // Offset to the adjacent cell


    if (!existingResponse) {
      const prompt = `Generate a response for the following question: "${question}"`;
      const response = getMistralAIResponse(prompt);


      if (response) {
        const generatedResponse = response.trim();
        activeCell.offset(0, 1).setValue(generatedResponse); // Set response in the adjacent cell
      } else {
        Logger.log('Failed to get a response for question: ' + question);
      }
    } else {
      Logger.log('Response already exists for question: ' + question);
    }
  } else {
    Logger.log('Active cell should be in column A (containing questions)');
  }
}


function getMistralAIResponse(prompt) {
  // const apiKey = 'XRqs0ATTneIjz477JWtMBSgPtylMZdto';
  // const url = 'https://api.mistral.ai/v1/chat/completions';


  const payload = {
    "model": "mistral-small-latest",
    "messages": [{
      "role": "user",
      "content": prompt
    }],
    "temperature": 0.7,
    "top_p": 1,
    "max_tokens": 512,
    "stream": false,
    "safe_prompt": false,
    "random_seed": 1337
  };


  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      'Authorization': 'Bearer ' + apiKey
    },
    payload: JSON.stringify(payload)
  };


  try {
    const response = UrlFetchApp.fetch(url, options);
    const responseCode = response.getResponseCode();


    if (responseCode === 200) {
      const responseData = JSON.parse(response.getContentText());
      return responseData.choices[0].message.content.trim();
    } else {
      Logger.log('Error: ' + response.getContentText());
      return null;
    }
  } catch (e) {
    Logger.log('Error: ' + e);
    return null;
  }
}

Scroll to Top