Тексты объявлений для Авито через API

Заголовок и описание для каждого товара или услуги из вашей таблицы. Тексты уходят в файл автозагрузки, Авито создаёт объявления сам. Дефекты б/у вещей модель называет прямо, условий, которых нет в данных, не придумывает.

  • 1 000 объявлений — от 57,84 ₽, оценка по ценам каталога
  • Заголовок до 50 символов
  • Дефекты б/у — прямо
  • Файл для автозагрузки
Объявление · Казань

iPhone 13 128 ГБ, аккумулятор 84%

38 000 ₽

iPhone 13 на 128 ГБ, пользовались два года. Телефон подойдёт тем, кто ищет устройство без ремонтов и с полным комплектом.

— Модель: iPhone 13, 128 ГБ

— Срок использования: 2 года

— Аккумулятор: 84%

— Корпус: без сколов

— Экран: на защитном стекле есть трещина, сам экран целый

— Ремонты: не ремонтировался

— Комплектация: полный комплект с коробкой

Цена: 38 000 ₽.

Город: Казань.

Напишите в сообщения на Авито, если появятся вопросы.

Реальный текст из теста. Как тестировали

Задача

У магазина на Авито 300 товаров, у сервиса — 40 услуг в трёх городах, у агентства — десяток клиентов с автозагрузкой. Тексты пишутся вручную или копируются из карточек поставщика. В итоге в одних объявлениях нет половины характеристик, в других — одинаковые тексты на десятки позиций.

Через API таблица с фактами превращается в заголовки и описания одной командой. Для второго города модель пишет другой текст с теми же фактами.

Для кого

Для всех, у кого объявлений больше, чем хочется писать руками.

Магазин на Авито

Новые товары из каталога: характеристики есть, текстов нет. Одна строка таблицы — одно объявление. Из той же таблицы — описания для сайта.

Сотни объявлений за минуту.

Мастера и сервисы

Ремонт, уборка, грузоперевозки, репетиторы. Условия работы, стаж и цена — в данных, текст — от модели.

Отдельный текст на каждую услугу.

Агентства с автозагрузкой

Десятки клиентов, разные города, общий процесс: таблица — скрипт — файл автозагрузки.

Один ключ на всех клиентов.

Перепродажа б/у

Состояние и дефекты из таблицы приёмки. Модель называет их прямо, без «в отличном состоянии».

Меньше споров с покупателями.

Как текст попадает на Авито

Четыре шага. Модель пишет тексты, а размещает их автозагрузка Авито — без ручного копирования.

  1. Шаг 1

    Таблица

    Товары или услуги с фактами и ценой: выгрузка из учётной системы или Google-таблица.

    id, name, facts, price, city

  2. Шаг 2

    Скрипт и Polza

    Скрипт отправляет каждую строку модели и получает заголовок и описание в JSON.

    python write_ads.py

  3. Шаг 3

    Файл автозагрузки

    Тексты ложатся в поля Title и Description файла, который Авито забирает по ссылке.

    feed.xml

  4. Шаг 4

    Объявления

    Автозагрузка создаёт и обновляет объявления. Изменили текст в файле — объявление обновится при следующей загрузке.

    30 объявлений · 3 категории · 3 города

Тексты в файле автозагрузки

Скрипт кладёт заголовок в Title, описание — в Description внутри CDATA, чтобы переносы строк и тире дошли до объявления как есть. Цена, адрес, категория и фото берутся из вашей таблицы. Обязательные поля и лимиты зависят от категории — сверяйте файл с форматом автозагрузки Авито.

feed.xml · упрощённо
<Ads formatVersion="3" target="Avito.ru">
  <Ad>
    <Id>B03</Id>
    <Title>iPhone 13 128 ГБ, аккумулятор 84%</Title>
    <Description><![CDATA[iPhone 13 на 128 ГБ, пользовались два года. Телефон подойдёт…]]></Description>
    <Price>38000</Price>
    <Address>Казань</Address>
    <!-- категория, фото и поля категории — из вашего каталога -->
  </Ad>
</Ads>

Как это выглядит в объявлении

Реальные тексты из теста. Модель пишет описание строками с тире — так его проще читать с экрана.

Объявление · Екатеринбург

Ремонт холодильников на дому, выезд в день обращения

от 1 500 ₽

Частный мастер с опытом 12 лет выполняет ремонт холодильников на дому в Екатеринбурге. Выезд по городу в день обращения, запчасти привожу с собой.

— Выезд и диагностика — 500 ₽, при ремонте диагностика бесплатно.

— Гарантия на работу — 6 месяцев.

— Стоимость ремонта — от 1500 ₽.

— Работаю по Екатеринбургу, выезд в день обращения.

Пишите в сообщения на Авито, чтобы вызвать мастера.

Услуга: условия и цена из данных
Поиск · «лампа настольная»

Настольная лампа Lumo Q с Qi-зарядкой — 3 290 ₽

Монитор-лампа Lumo Bar 5 Вт с пультом — 2 790 ₽

Лампа для рисования Lumo Draw, 14 Вт, CRI 95 — 5 490 ₽

Термокружка Arctic 470 мл сталь 18/8 — 1 490 ₽

В выдаче — заголовок и цена
Объявление · Москва

Настольная лампа Lumo Q с Qi-зарядкой

3 290 ₽

Настольная лампа Lumo Q на гибкой стойке. В корпус встроена площадка для беспроводной зарядки смартфонов — разместите телефон на основании, и он начнёт заряжаться без подключения кабеля. Подойдёт для рабочего места или прикроватного столика.

— Мощность лампы: 12 Вт

— Беспроводная зарядка Qi: 10 Вт

— Цветовая температура: регулируется от 3000 до 6000 K

— Таймер отключения: 30 минут

— Стойка: гибкая

— Состояние: новая

Цена: 3290 ₽

Город: Москва

Заинтересовала лампа — пишите в сообщения на Авито.

Новый товар: характеристики строками

Сколько стоят 1 000 объявлений

Замер — фактический расход по полю cost_rub на 8 одинаковых объявлениях, пересчитанный на 1 000; у DeepSeek — среднее по трём прогонам. Рассуждение отключено у всех моделей. Стоимость «сейчас» Polza.ai оценивает по текущим ценам каталога.

Стоимость по текущим ценам каталога
Модель1 000 объявлений, замер 6 октябряОтветЗнаков в описании1 000 объявлений, оценка сейчас
GPT-5 Mini54 ₽7,1 с36457,84 ₽
Gemini 2.5 Flash63 ₽3,0 с37071,78 ₽
DeepSeek V4 Pro10 ₽6,2 с305170 ₽
Grok 4.3118 ₽2,2 с233222 ₽
Claude Sonnet 5440 ₽4,7 с336641 ₽

Замер — 6 октября 2026, по ценам того дня.

«Оценка сейчас» — по текущим ценам каталога для объёмов, которые оценила редакция, а не замерил тест: 700 токенов на входе (промпт и факты) и 400 на выходе (заголовок и описание в JSON) на одно объявление.

В основном прогоне DeepSeek V4 Pro 30 объявлений стоили 0,35 ₽ по ценам 6 октября. Как отключить рассуждение и закрепить провайдера — в сценарии про SEO-тексты: как не переплатить за рассуждение и провайдера.

Готовый скрипт на Python

Читает таблицу, пишет объявления параллельно, повторяет запросы при ошибках и печатает расход. С аргументом-городом пишет второй вариант текста для другого города. Нужен пакет openai и ключ в POLZA_API_KEY.

Вход: ads.csv

Тип, название, факты через точку с запятой, цена и город. Для б/у в фактах — срок использования и дефекты.

ads.csv
id,type,name,facts,price,city
B03,б/у,"iPhone 13, 128 ГБ","б/у 2 года; аккумулятор 84%; без сколов; трещина на защитном стекле, экран целый; полный комплект с коробкой; не ремонтировался",38000,Казань
S01,услуга,Ремонт холодильников на дому,"частный мастер; стаж 12 лет; выезд по городу в день обращения; диагностика 500 ₽, бесплатно при ремонте; гарантия на работу 6 месяцев; запчасти привожу с собой",от 1500,Екатеринбург

Выход: ads.jsonl

Заголовок и описание по схеме. Реальный ответ из теста.

ads.jsonl · одна строка
{
  "id": "S01",
  "title": "Ремонт холодильников на дому, выезд в день обращения",
  "description": "Частный мастер с опытом 12 лет выполняет ремонт холодильников на дому в Екатеринбурге. Выезд по городу в день обращения, запчасти привожу с собой.\n— Выезд и диагностика — 500 ₽, при ремонте диагностика бесплатно.\n— Гарантия на работу — 6 месяцев.\n— Стоимость ремонта — от 1500 ₽.\n— Работаю по Екатеринбургу, выезд в день обращения.\n\nПишите в сообщения на Авито, чтобы вызвать мастера."
}
Python · write_ads.py
# write_ads.py — тексты объявлений для Авито из CSV через Polza
import asyncio, csv, json, os, sys
from openai import AsyncOpenAI, APIStatusError

MODEL = "deepseek/deepseek-v4-pro"
PROVIDER = "streamlake/fp8"  # самый дешёвый провайдер модели: top_provider.name в каталоге
CONCURRENCY = 10

ai = AsyncOpenAI(base_url="https://polza.ai/api/v1", api_key=os.environ["POLZA_API_KEY"])
SYSTEM = open("prompt.txt", encoding="utf-8").read()

SCHEMA = {
    "name": "avito_ad",
    "strict": True,
    "schema": {
        "type": "object",
        "properties": {"title": {"type": "string"}, "description": {"type": "string"}},
        "required": ["title", "description"],
        "additionalProperties": False,
    },
}

async def write(row, sem, stats, city=None):
    prompt = (f"Тип: {row['type']}\nНазвание: {row['name']}\nФакты: {row['facts']}\n"
              f"Цена: {row['price']} ₽\nГород: {city or row['city']}")
    if city:  # второе объявление того же товара в другом городе
        prompt += "\nЭто второе объявление того же товара в другом городе: напиши его другими словами, факты те же."
    async with sem:
        for attempt in range(5):
            try:
                r = await ai.chat.completions.create(
                    model=MODEL,
                    messages=[{"role": "system", "content": SYSTEM},
                              {"role": "user", "content": prompt}],
                    response_format={"type": "json_schema", "json_schema": SCHEMA},
                    extra_body={"reasoning": {"effort": "none"},
                                "provider": {"only": [PROVIDER], "allow_fallbacks": False}},
                )
                break
            except APIStatusError as e:
                if e.status_code in (429, 500, 502, 503) and attempt < 4:
                    await asyncio.sleep(2 ** attempt)
                    continue
                raise
    stats["rub"] += r.usage.model_extra.get("cost_rub", 0)
    return {"id": row["id"], "city": city or row["city"], **json.loads(r.choices[0].message.content)}

async def main():
    # python write_ads.py [город для второго варианта]
    second_city = sys.argv[1] if len(sys.argv) > 1 else None
    rows = list(csv.DictReader(open("ads.csv", encoding="utf-8")))
    sem, stats = asyncio.Semaphore(CONCURRENCY), {"rub": 0}
    results = await asyncio.gather(*(write(r, sem, stats, second_city) for r in rows), return_exceptions=True)
    name = "ads_variant.jsonl" if second_city else "ads.jsonl"
    ok = 0
    with open(name, "w", encoding="utf-8") as out, open("errors.txt", "w", encoding="utf-8") as err:
        for row, res in zip(rows, results):
            if isinstance(res, Exception):
                err.write(f"{row['id']}\t{res}\n")
            else:
                out.write(json.dumps(res, ensure_ascii=False) + "\n")
                ok += 1
    print(f"Готово {ok} из {len(rows)}, расход {stats['rub']:.2f} ₽")

asyncio.run(main())

Промпт для объявлений

Промпт задаёт структуру описания: кому подойдёт, факты строками, условия, призыв написать. Так все объявления выглядят одинаково аккуратно, а покупатель находит нужное за секунды.

Вторая версия добавляет три запрета по итогам первого прогона: условия сделки только из данных, без оценок состояния, без обещаний про чужие правила. Модель дописывала «самовывоз», «в хорошем состоянии» у телефона с трещиной и «подходит под нормы большинства авиакомпаний».

prompt.txt
Ты пишешь объявления для Авито.

Заголовок:
- до 50 символов: что это и главный параметр;
- без капслока, эмодзи и слов «срочно», «лучший»,
  «идеальный».

Описание — от 400 до 1000 символов:
1. Первый абзац: что это и кому подойдёт.
2. Характеристики или состояние — строками, каждая
   начинается с «— ».
3. Условия: цена, город, самовывоз или выезд —
   только если они есть в данных.
4. Последняя строка — предложение написать в
   сообщения на Авито.

Правила:
- Только факты из данных. Не придумывай гарантию,
  доставку, скидки, торг, сроки, комплектацию и
  причины продажи.
- Для б/у вещей перечисли все дефекты из данных
  прямо, не смягчай и не пропускай.
- Самовывоз, доставку, встречу, торг и обмен
  упоминай, только если они есть в данных.
- Не оценивай состояние словами «хорошее»,
  «отличное», «как новый», «надёжный» и не пиши «всё
  работает», если этого нет в данных — только факты.
- Не обещай, что товар подходит под чужие правила и
  нормы, если этого нет в данных.
- Не указывай телефоны, ссылки, мессенджеры и адреса
  сайтов.
- Без восклицательных знаков, капслока и слов
  «уникальный», «идеальный», «лучший»,
  «качественный».

Верни JSON: title — заголовок, description —
описание.

Проверка перед загрузкой

Пять проверок кодом. Они дешевле модели-проверки и ловят то, что промпт не удержал.

Заголовок до 50 символов

Такой лимит задаёт промпт: короткий заголовок целиком виден в выдаче. В тесте модель превысила его в 1 объявлении из 30 — такие перегенерируйте.

Условия, которых нет в данных

Ищите в описании «самовывоз», «доставка», «торг», «обмен» и сверяйте с фактами. В тесте так нашлись 8 лишних условий в первом прогоне и 2 во втором.

Нет контактов и ссылок

Телефоны, ссылки и мессенджеры в описании модель не писала ни разу, но проверка стоит одну строку кода.

Структура на месте

Строки с тире и призыв написать в сообщения. В одном из трёх прогонов на 8 объявлениях DeepSeek потеряла список в 6 текстах — проверка отправит их на повтор.

Дефекты б/у названы

Каждое слово из дефектов в фактах — «трещина», «пятно», «шум» — должно быть в описании. В тесте модель назвала все дефекты во всех 7 объявлениях с ними.

Тексты не повторяются

Для второго города модель писала другой текст: совпадение с первым вариантом — от 30 до 65% по символам. Выше 70% — перегенерируйте.

Через Claude, OpenAI и Grok — или без кода

Скрипт и файл автозагрузки соберёт ИИ-агент. Модели для текстов — в том же каталоге Polza.ai.

Claude Code и Claude Desktop

Положите таблицу и промпт в папку и отдайте Claude задание ниже: агент напишет тексты и соберёт feed.xml.

Claude Sonnet 5: 1 000 объявлений — 641 ₽, оценка по ценам каталога.

Codex и ChatGPT Desktop

То же задание выполняет Codex CLI. Модели GPT подключаются тем же ключом Polza.

GPT-5 Mini: 1 000 объявлений — 57,84 ₽, оценка по ценам каталога.

Grok

Модели xAI в том же API: MODEL = "x-ai/grok-4.3" в скрипте.

Grok 4.3: 1 000 объявлений — 222 ₽, оценка по ценам каталога.

Задание для агента

Подходит для Claude Code, Codex и других агентов из интеграций. Агент покажет первые 20 объявлений до полного прогона.

задание для Claude Code или Codex
В папке лежат ads.csv и prompt.txt.
Напиши и запусти скрипт на Python:
для каждой строки запрос к https://polza.ai/api/v1
через OpenAI SDK, ключ — в переменной POLZA_API_KEY,
модель deepseek/deepseek-v4-pro без рассуждений
(reasoning: {effort: none}), провайдер streamlake/fp8,
системный промпт — prompt.txt,
ответ — JSON с полями title, description.
Потом собери из ответов файл автозагрузки feed.xml:
Title, Description в CDATA, Price, Address из таблицы.
Сначала 20 строк и покажи их, после моего «ок» — все.

Без кода: n8n и Dify

Google-таблица с товарами, нода OpenAI Chat Model с адресом https://polza.ai/api/v1, тексты — обратно в таблицу. Файл автозагрузки собирается из неё так же, как в скрипте.

n8n

Новые строки в таблице — новые тексты к утру.

Нода OpenAI Chat Model с адресом Polza.

Dify

Workflow: текст объявления и проверка, запуск пачкой.

Облако или self-hosted.

Тест редакции: 30 объявлений

10 новых товаров магазина, 10 б/у вещей частника и 10 услуг в трёх городах. Данные вымышленные, в 7 б/у вещах — реальные по смыслу дефекты: трещина, пятно, шум при отжиме. Редактор прочитал каждое объявление. Замер 6 октября 2026: весь тест, включая сравнение пяти моделей, стоил 6,5 ₽ по ценам того дня.

Объявлений
30
Время
39 с
Расход
0,35 ₽
Без выдумок
26 из 30

Два прогона DeepSeek V4 Pro

ПрогонРасходВремяЗаголовок до 50Лишние условияОбъявления с выдумкойДефекты б/у названы
v1: базовый промпт0,35 ₽28 с29 из 308117 из 7
v2: запрет условий и оценок0,35 ₽39 с29 из 30247 из 7

Лишние условия — самовывоз, доставка, торг, обмен, которых нет в фактах; ищутся кодом. Выдумки — по вычитке редактора. Телефонов, ссылок, капслока и восклицательных знаков не было ни в одном объявлении. Расход — по ценам 6 октября 2026.

Второй вариант для другого города

Для 10 товаров мы попросили второй текст для Санкт-Петербурга с теми же фактами. Это стоило 0,12 ₽ по ценам 6 октября. Совпадение с первым вариантом — от 30 до 65% по символам, заголовки разные во всех 10.

Москва

Монитор-лампа Lumo Bar 5 Вт с пультом

Монитор-лампа Lumo Bar — накладной светильник на монитор. Подойдёт тем, кто работает или играет за экраном и хочет добавить локальное освещение рабочей зоны без бликов.

Характеристики и комплектация:

— новая

— мощность: 5 Вт

— крепление на монитор толщиной 0,5–3 см

— асимметричный свет без бликов на экране

— пульт управления в комплекте

— питание от USB

Цена: 2790 ₽

Город: Москва

По всем вопросам пишите в сообщения на Авито.

Первый вариант
Санкт-Петербург

LED-лампа Lumo Bar на монитор, 5 Вт

Настольная LED-лампа с креплением на верхний край монитора. Подойдёт тем, кто хочет дополнительно подсветить рабочую зону, не занимая место на столе.

— Тип: монитор-лампа

— Состояние: новая

— Мощность: 5 Вт

— Крепление: на монитор толщиной от 0,5 до 3 см

— Особенность: асимметричный свет для отсутствия бликов на экране

— Управление: пульт

— Питание: USB

Цена: 2790 ₽

Город: Санкт-Петербург

По всем вопросам пишите в сообщения на Авито.

Второй вариант с теми же фактами

Пять моделей на 8 трудных объявлениях

Модель1 000 объявлений, замерСтруктураЛишние условияЧто увидел редактор
DeepSeek V4 Pro *10 ₽18 из 241В двух прогонах из трёх — полная структура, в одном потеряла список и призыв.
GPT-5 Mini54 ₽8 из 81Аккуратно, каждая строка «параметр: значение». Один раз дописала «самовывоз: да».
Gemini 2.5 Flash63 ₽8 из 80Структура на месте, но добавляет общие слова: «поддерживает современные приложения».
Grok 4.3118 ₽8 из 82Самая быстрая и короткая. Дважды дописала «самовывоз».
Claude Sonnet 5440 ₽8 из 80Полно и без выдумок, структура во всех 8.

Трудные — те, где модель ошибалась в первом прогоне: б/у с дефектами, услуги с условиями, товар с «нормами авиакомпаний». Промпт v2. * DeepSeek прогнали трижды после сбоя в первом прогоне, в таблице — сумма и среднее по трём. Стоимость — замер 6 октября 2026 по ценам того дня, текущая — в разделе «Стоимость».

Вывод

Для каталога в сотни позиций — DeepSeek V4 Pro и пять проверок кодом: 26 из 30 объявлений без выдумок, по оценке на текущих ценах каталога 1 000 объявлений — 170 ₽. Если нужен ровный результат без повторов — Claude Sonnet 5 или GPT-5 Mini. Дефекты б/у все модели называли прямо — это заслуга данных: что записано в таблице приёмки, то и попадёт в объявление.

Вопросы

Можно ли загружать тексты на Авито без проверки?

После пяти проверок кодом — да, кроме объявлений, которые проверка отправила на повтор. Первые 20–30 объявлений прочитайте целиком: так вы увидите, что нужно добавить в промпт.

Как сделать разные тексты для разных городов?

Запустите скрипт второй раз с названием города. Модель пишет другими словами с теми же фактами: в тесте совпадение с первым вариантом было 30–65%.

Сколько объявлений можно сделать за час?

В тесте 30 объявлений заняли 39 секунд при 10 параллельных запросах — около 2 800 в час.

Модель напишет, что вещь в хорошем состоянии?

Промпт запрещает оценки состояния. В объявление попадают только факты из таблицы: срок использования и дефекты. В первом прогоне модель один раз написала «в хорошем состоянии» про телефон с трещиной на стекле, во втором — ни разу.

Нужно ли знать формат автозагрузки?

Скрипт возвращает тексты, а файл автозагрузки собирается из них и вашей таблицы. Агент вроде Claude Code соберёт его по заданию со страницы; обязательные поля категории сверьте со спецификацией автозагрузки Авито.

Можно ли платить юрлицом?

Да. Polza.ai работает по договору: счёт, УПД и НДС. Расход виден в кабинете по ключам и моделям.

Другие сценарии: SEO-тексты · Ответы на отзывы · Тесты по урокам · Письма клиентам · Протоколы встреч

Напишите первые 20 объявлений

Ключ, таблица с фактами и скрипт со страницы. Прогон показывает, как ваши товары будут выглядеть на Авито.

Остались вопросы? Документация Polza.AI, поддержка в Telegram или support@polza.ai

Страницу проверила редакция Polza.AI, обновлено . Цифры теста — замер 6 октября 2026 по ценам того дня; стоимость «сейчас» Polza.ai считает по каталогу и обновляет каждый час.

Разработчикам: вход через Polza

Связанные страницы: модели для текста, Codex, для бизнеса.

Сайт использует cookie.