Free social media report generator API
Drop in a CSV of your post metrics, check which column is which, and get a one-page report with totals, engagement rate, a table per network, your top 5 posts and your best weekday. Copy it, download it as CSV or print it to PDF for your client. The file never leaves your browser.
- Endpoint:
POST https://postboost.co/app/api/tools/social-media-report-generator(operationIdsummarizeReport) - Web tool: postboost.co/tools/social-media-report-generator
- Token: optional (limits)
- MCP: tool
summarize-reportonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
rows | array of object | One object per post, already mapped to these fields. Leave out a count the export does not have. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/social-media-report-generator \
-H 'Content-Type: application/json' \
-d '{"rows":[{"date":"2026-09-01","network":"linkedin","text":"Launch post: our new planning board","views":2400,"likes":96,"comments":12,"shares":8},{"date":"2026-09-02","network":"instagram","text":"Behind the scenes of the shoot","views":1800,"likes":120,"comments":9,"shares":3},{"date":"2026-09-08","network":"linkedin","text":"Customer story: a bakery'\''s bookings","views":1500,"likes":40,"comments":4,"shares":6}]}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolSummarizeReportRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.summarize_report(FreeToolSummarizeReportRequest.from_dict({"rows": [{"date": "2026-09-01", "network": "linkedin", "text": "Launch post: our new planning board", "views": 2400, "likes": 96, "comments": 12, "shares": 8}, {"date": "2026-09-02", "network": "instagram", "text": "Behind the scenes of the shoot", "views": 1800, "likes": 120, "comments": 9, "shares": 3}, {"date": "2026-09-08", "network": "linkedin", "text": "Customer story: a bakery's bookings", "views": 1500, "likes": 40, "comments": 4, "shares": 6}]}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.summarizeReport({ rows: [{ date: "2026-09-01", network: "linkedin", text: "Launch post: our new planning board", views: 2400, likes: 96, comments: 12, shares: 8 }, { date: "2026-09-02", network: "instagram", text: "Behind the scenes of the shoot", views: 1800, likes: 120, comments: 9, shares: 3 }, { date: "2026-09-08", network: "linkedin", text: "Customer story: a bakery's bookings", views: 1500, likes: 40, comments: 4, shares: 6 }] });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolSummarizeReportRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->summarizeReport(new FreeToolSummarizeReportRequest(['rows' => [['date' => "2026-09-01", 'network' => "linkedin", 'text' => "Launch post: our new planning board", 'views' => 2400, 'likes' => 96, 'comments' => 12, 'shares' => 8], ['date' => "2026-09-02", 'network' => "instagram", 'text' => "Behind the scenes of the shoot", 'views' => 1800, 'likes' => 120, 'comments' => 9, 'shares' => 3], ['date' => "2026-09-08", 'network' => "linkedin", 'text' => "Customer story: a bakery's bookings", 'views' => 1500, 'likes' => 40, 'comments' => 4, 'shares' => 6]]]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolSummarizeReportRequest
if err := json.Unmarshal([]byte(`{"rows":[{"date":"2026-09-01","network":"linkedin","text":"Launch post: our new planning board","views":2400,"likes":96,"comments":12,"shares":8},{"date":"2026-09-02","network":"instagram","text":"Behind the scenes of the shoot","views":1800,"likes":120,"comments":9,"shares":3},{"date":"2026-09-08","network":"linkedin","text":"Customer story: a bakery's bookings","views":1500,"likes":40,"comments":4,"shares":6}]}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.SummarizeReport(context.Background()).FreeToolSummarizeReportRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.summarize_report(PostBoost::FreeToolSummarizeReportRequest.new({ rows: [{ date: "2026-09-01", network: "linkedin", text: "Launch post: our new planning board", views: 2400, likes: 96, comments: 12, shares: 8 }, { date: "2026-09-02", network: "instagram", text: "Behind the scenes of the shoot", views: 1800, likes: 120, comments: 9, shares: 3 }, { date: "2026-09-08", network: "linkedin", text: "Customer story: a bakery's bookings", views: 1500, likes: 40, comments: 4, shares: 6 }] }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolSummarizeReportRequest;
import com.postboost.model.FreeToolSummarizeReportResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolSummarizeReportRequest request = FreeToolSummarizeReportRequest.fromJson("{\"rows\":[{\"date\":\"2026-09-01\",\"network\":\"linkedin\",\"text\":\"Launch post: our new planning board\",\"views\":2400,\"likes\":96,\"comments\":12,\"shares\":8},{\"date\":\"2026-09-02\",\"network\":\"instagram\",\"text\":\"Behind the scenes of the shoot\",\"views\":1800,\"likes\":120,\"comments\":9,\"shares\":3},{\"date\":\"2026-09-08\",\"network\":\"linkedin\",\"text\":\"Customer story: a bakery's bookings\",\"views\":1500,\"likes\":40,\"comments\":4,\"shares\":6}]}");
FreeToolSummarizeReportResponse result = api.summarizeReport(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolSummarizeReportRequest>(@"{""rows"":[{""date"":""2026-09-01"",""network"":""linkedin"",""text"":""Launch post: our new planning board"",""views"":2400,""likes"":96,""comments"":12,""shares"":8},{""date"":""2026-09-02"",""network"":""instagram"",""text"":""Behind the scenes of the shoot"",""views"":1800,""likes"":120,""comments"":9,""shares"":3},{""date"":""2026-09-08"",""network"":""linkedin"",""text"":""Customer story: a bakery's bookings"",""views"":1500,""likes"":40,""comments"":4,""shares"":6}]}");
var result = await api.SummarizeReportAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolSummarizeReportRequest;
let config = Configuration::new();
let request: FreeToolSummarizeReportRequest = serde_json::from_str(r##"{"rows":[{"date":"2026-09-01","network":"linkedin","text":"Launch post: our new planning board","views":2400,"likes":96,"comments":12,"shares":8},{"date":"2026-09-02","network":"instagram","text":"Behind the scenes of the shoot","views":1800,"likes":120,"comments":9,"shares":3},{"date":"2026-09-08","network":"linkedin","text":"Customer story: a bakery's bookings","views":1500,"likes":40,"comments":4,"shares":6}]}"##)?;
let result = free_tools_api::summarize_report(&config, request).await?;
println!("{:?}", result);
echo '{"rows":[{"date":"2026-09-01","network":"linkedin","text":"Launch post: our new planning board","views":2400,"likes":96,"comments":12,"shares":8},{"date":"2026-09-02","network":"instagram","text":"Behind the scenes of the shoot","views":1800,"likes":120,"comments":9,"shares":3},{"date":"2026-09-08","network":"linkedin","text":"Customer story: a bakery'\''s bookings","views":1500,"likes":40,"comments":4,"shares":6}]}' | ./postboost-cli --content-type application/json summarizeReport -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"posts": 3,
"date_range": {
"from": "2026-09-01",
"to": "2026-09-08"
},
"views": 5700,
"engagements": 298,
"engagement_rate": 5.23,
"engagements_from": [
"likes",
"comments",
"shares"
],
"networks": [
{
"network": "linkedin",
"posts": 2,
"views": 3900,
"engagements": 166,
"rate": 4.26
},
{
"network": "instagram",
"posts": 1,
"views": 1800,
"engagements": 132,
"rate": 7.33
}
],
"top_posts": [
{
"date": "2026-09-02",
"network": "instagram",
"text": "Behind the scenes of the shoot",
"engagements": 132
},
{
"date": "2026-09-01",
"network": "linkedin",
"text": "Launch post: our new planning board",
"engagements": 116
},
{
"date": "2026-09-08",
"network": "linkedin",
"text": "Customer story: a bakery's bookings",
"engagements": 50
}
],
"weekdays": [
{
"day": "Monday",
"posts": 0,
"engagements": 0,
"average": null
},
{
"day": "Tuesday",
"posts": 2,
"engagements": 166,
"average": 83
},
{
"day": "Wednesday",
"posts": 1,
"engagements": 132,
"average": 132
},
{
"day": "Thursday",
"posts": 0,
"engagements": 0,
"average": null
},
{
"day": "Friday",
"posts": 0,
"engagements": 0,
"average": null
},
{
"day": "Saturday",
"posts": 0,
"engagements": 0,
"average": null
},
{
"day": "Sunday",
"posts": 0,
"engagements": 0,
"average": null
}
],
"best_weekday": "Wednesday"
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Summarize social media post metrics into a report with the PostBoost summarize-report tool.
MCP requests are capped at 128 KB without a token and 1.5 MB with one; send bigger requests to the API (2 MB).
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 2 MB. |
422 | A field is invalid; the body lists the errors per field. |
429 | A limit is reached; see limits. |