PageSourceSearch

https://johnpearcebooks.com/books/paris-reckoning-sandi-brennan-book-1

html johnpearcebooks.com collected 2026-10-09 01:17:08 UTC 36,705 bytes, 336 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4<script>var _rollbarConfig = {"accessToken":"295d6d2e8f934257b0f4ddb304115b52","autoInstrument":true,"captureUncaught":true,"captureUnhandledRejections":true,"hostSafeList":[],"hostBlockList":[],"ignoredMessages":[],"payload":{"environment":"production"}};</script>
vendor: 1 bytes, line 4
4
5<script>!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.26.1/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||function(r){return!("object"!=typeof r||void 0!==r.page&&!r.page)}(a))&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDB
5Request,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);</script>
vendor: 1 bytes, line 5
5
6<script type="importmap" data-turbo-track="reload">{
7  "imports": {
8    "application": "https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js",
9    "turbo_stream_actions": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js",
10    "@hotwired/turbo-rails": "https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js",
11    "trix": "https://cdn.jsdelivr.net/npm/[email protected]/dist/trix.umd.min.js",
12    "js-cookie": "https://cdn.jsdelivr.net/npm/[email protected]/dist/js.cookie.min.js",
13    "sortablejs": "https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js",
14    "jquery-sortablejs": "https://cdn.jsdelivr.net/npm/jquery-sortablejs@latest/jquery-sortable.js",
15    "@hotwired/stimulus": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus.min-976b4e166c7f712397cad15409e0b976dfd9f2373f5e04d9f4520f0d5a7597f5.js",
16    "@hotwired/stimulus-loading": "https://d32hgpjj5y625p.cloudfront.net/assets/stimulus-loading-39227295c8a6d71e10ca2a94dede18522ced047f6ccbf8788e926f8be14aff1b.js",
17    "controllers/add_subscriber_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/add_subscriber_controller-fd9fe8936dd464dc1cbae3d31c3bc986e5e2114ee003fab4e5418f3efdaa46be.js",
18    "controllers/application": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/application-44e5edd38372876617b8ba873a82d48737d4c089e5180f706bdea0bb7b6370be.js",
19    "controllers/arrow_sortable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/arrow_sortable_controller-d4e97af69712b31f7f40abf5e96bde45ecbc3f2bf3f69ae9850ffe07abe45f75.js",
20    "controllers/character_count_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/character_count_controller-200d3b65cd98910eec0805f1a854071637f3f6275e6ebce72a77ecabec00bb78.js",
21    "controllers/copyright_name_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/copyright_name_modal_controller-9b79fc4f3904af9193f900429852493bf6dc9ae658ac2fcf9326121ad7ed267e.js",
22    "controllers/design_nav_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_nav_controller-2f712f7500c82845450b65dec862659df22dea1d2d39a17b9469d7070bb1d233.js",
23    "controllers/design_page_section_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/design_page_section_controller-f1a457031a27726cd23bb568294b137349e91d691cdbe35758af8b0e4cce37f4.js",
24    "controllers/footer_text_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/footer_text_modal_controller-088ed4df170fba2521f21d6c570874fa21ba097fd46f6551b778af61f00bb8ed.js",
25    "controllers/header_footer_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/header_footer_controller-83c45efc3461993a8d8ba5cc57773bd471848e279f196a2c340f486a1297802b.js",
26    "controllers": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/index-d92597c94be3b5a5adba9c0f17fb1601585e59e54ed1e242cd99ce6f935198e5.js",
27    "controllers/manage_subscribers_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/manage_subscribers_controller-93a288f637c86f52c4661a1427e3ffb7c2bf46f425ce2a36ff995c948bcf7c89.js",
28    "controllers/modal_form_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/modal_form_controller-ed45881813baad0b886a257c8389b563a3f232cbc408f66cf4da53daa38bc4c1.js",
29    "controllers/newsletter_builder_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_controller-f2f1e3b58c8d4436bcdd8eea1d3b71a276a963c5e87549fffa49bab275bc9580.js",
30    "controllers/newsletter_builder_image_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_controller-13937df8f37d686d07b0834fdc8e977b71cc4e700adfc069d1c499f0cbb6b6b6.js",
31    "controllers/newsletter_builder_image_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_image_form_fields_controller-5fb397c6153ab53d8aec1e3027c32a699349fbdbf1ebee1143215f8bd6eee05a.js",
32    "controllers/newsletter_builder_modal_form_fields_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_modal_form_fields_controller-9e5fb79d742394fa9eaeeddb437123dd78ed2f87d4cea5d220a404e294795000.js",
33    "controllers/newsletter_builder_replaceable_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_replaceable_controller-2
331efea64bf8648e6883566d7b7be4c37654a24e08b2367dfeed4e44956097ee8.js",
34    "controllers/newsletter_builder_tags_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_builder_tags_controller-0eb8d1f271977faa68a92a53741979bf58ffc86c075f84f2d25deafbd3a60e47.js",
35    "controllers/newsletter_message_schedule_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/newsletter_message_schedule_modal_controller-c70893dd83a505fe506ad4430a1f8439966c9f4d9c8392d85895e73869ca3122.js",
36    "controllers/search_modal_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/search_modal_controller-35710a5ac2b54272c5c23a69e0adb29820848de5844d613f73d58a2ea27a61f3.js",
37    "controllers/section_card_controller": "https://d32hgpjj5y625p.cloudfront.net/assets/controllers/section_card_controller-6e39fd28ad51d887ed0c7a10d2c51b3ff3a1bd36621fdcf810dbc908a2f82624.js"
38  }
39}</script>
39
40<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/application-f207b082d340e2d7ef1faf6a3963b9409fa3147fb7e312868adaa67e76083f68.js">
41<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo_stream_actions-ff801f8567a3558f4a5e50a81da697f29e835e2fa46cc6bf769179d5831663dc.js">
42<link rel="modulepreload" href="https://d32hgpjj5y625p.cloudfront.net/assets/turbo.min-ddd8b828c747ffd95dbdfaa87b2414d120a316eed8407f19f78e777d074e5e96.js">
43<script type="esms-options">{"nonce":null}</script>
vendor: 1 bytes, line 43
43
44<script src="https://d32hgpjj5y625p.cloudfront.net/assets/es-module-shims.min-a0e02f0f37eb67badf69f69d30f3d3ef921c0ba3d076579d03a937c6b1c29d2d.js" async="async" data-turbo-track="reload"></script>
vendor: 1 bytes, line 44
44
45<script type="module">import "application"</script>
45
46<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
47<title>Paris Reckoning (Sandi Brennan Book 1) | John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</title>
48<meta name="csrf-param" content="authenticity_token" />
49<meta name="csrf-token" content="MAuVKJH_SCSK5W5pW0xVsQrCMh9KPdMJiA0vN_LrqzLK1wNLD_qt_KtwLJ3GdUvj9TAwnFAOd2usvUMcaLxxcQ" />
50<meta name="csp-nonce" />
51<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport">
52  
52<script>
53    window.renderTurnstile = function () {
54      $('.cloudflare-turnstile-widget').each((i, widget) => {
55        turnstile.render(widget, {
56          sitekey: '0x4AAAAAABCVYQo6ZyG97FYI',
57          callback: function (token) {
58            $(widget).parents('form').find("input[type='submit']").prop("disabled", false);
59          },
60        });
61      });
62    };
63    window.turnstileLoaded = function() {
64      if (document.readyState === "loading") {
65        document.addEventListener('DOMContentLoaded', renderTurnstile);
66      } else {
67        renderTurnstile();
68      }
69    };
70    document.addEventListener("turbo:frame-load", renderTurnstile);
71  </script>
71
72
73    
73<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?onload=turnstileLoaded" async defer></script>
73
74
75<meta content="She survived Africa. Paris may finish the job.Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army — and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. She’s even persuaded Eddie Grant — the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War — to run her European operations.Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russia’s Wagner Group was buying governments and moving drugs. She survived it. Now she’s in Paris, finally, and for the first time in years she’s letting herself want something beyond the next mission.Then Steve disappears.He was a fellow student at Gran’Langue, Eddie’s language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldn’t quite admit. She convinced herself he was the love of her life, but now he’s gone — leaving behind a photograph, a transferred account she didn’t ask for, and no explanation at all.Sandi’s search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris — toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.Paris Reckoning is the first book in the Sandi Brennan series, set within the world of John Pearce’s acclaimed Eddie Grant Saga. If you’re meeting Sandi for the first time, you won’t need Eddie to follow her — but Eddie’s readers will feel right at home." name="description">
76<meta content="Paris Reckoning (Sandi Brennan Book 1) | John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" property="og:title">
77<meta content="She survived Africa. Paris may finish the job.Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army — and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. She’s even persuaded Eddie Grant — the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War — to run her European operations.Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russia’s Wagner Group was buying governments and moving drugs. She survived it. Now she’s in Paris, finally, and for the first time in years she’s letting herself want something beyond the next mission.Then Steve disappears.He was a fellow student at Gran’Langue, Eddie’s language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldn’t quite admit. She convinced herself he was the love of her life, but now he’s gone — leaving behind a photograph, a transferred account she didn’t ask for, and no explanation at all.Sandi’s search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris — toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.Paris Reckoning is the first book in the Sandi Brennan series, set within the world of John Pearce’s acclaimed Eddie Grant Saga. If you’re meeting Sandi for the first time, you won’t need Eddie to follow her — but Eddie’s readers will feel right at home." property="og:description">
78<meta content="https://johnpearcebooks.com/books/paris-reckoning-sandi-brennan-book-1" property="og:url">
79<meta content="book" property="og:type">
80<meta content="https://res.cloudinary.com/wellfleet/image/upload/b_auto,c_pad,h_630,q_auto,w_1200/g0vmujgmlz9qyjjahgo3kmuor6d7.jpg" property="og:image">
81<meta content="1200" property="og:image:width">
82<meta content="630" property="og:image:height">
83<meta content="image/jpeg" property="og:image:type">
84<meta content="John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" property="book:author">
85<meta content="2026-07-01" property="book:release_date">
86<meta content="summary" property="twitter:card">
87<link rel="icon" type="image/x-icon" href="https://res.cloudinary.com/wellfleet/image/upload/c_lpad,b_rgb:FFFFFF,w_32,h_32/c_lpad,w_28,h_28,co_rgb:000000,l_text:Prata_24_bold:JPA/v1701462860/favicon.png" />
88<style type="text/css">
89body {
90  --background-color: #FFFFFF;
91  --accent-color: #C83B2C;
92  --text-color: #000000;
93  --accent-contrast-color: #FFFFFF;
94  --logo-font: "DM Serif Display", serif;
95  --logo-font-weight: 400;
96  --logo-font-case: none;
97  --header-font: "Oswald", sans-serif;
98  --header-font-weight: 400;
99  --body-font: "DM Sans", sans-serif;
100  --background-image-url: url();
101  --mailing-list-background-image-url: url();
102}
103
104
105</style>
106<link href="https://johnpearcebooks.com/books/paris-reckoning-sandi-brennan-book-1" rel="canonical">
107<link href="//fonts.googleapis.com" rel="preconnect">
108<link crossorigin="true" href="//fonts.gstatic.com" rel="preconnect">
109<link as="style" crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&amp;family=DM Serif Display:wght@400&amp;family=Oswald:wght@400&amp;family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="preload" type="text/css">
110<link crossorigin="anonymous" href="https://fonts.googleapis.com/css2?display=swap&amp;family=DM Serif Display:wght@400&amp;family=Oswald:wght@400&amp;family=DM Sans:ital,opsz,wght@0,9..40,400;0,9..40,700;1,9..40,400;1,9..40,700" rel="stylesheet" type="text/css">
111<link rel="stylesheet" href="https://d32hgpjj5y625p.cloudfront.net/assets/website-0a9b9d72719691cda924f1126c93f112b2e32c7f844e1da307dba457029ac800.css" media="all" />
112<script src="https://d32hgpjj5y625p.cloudfront.net/assets/website-51048669aa058af730a2050187f188c2dff273ff3c464e46b7b3f7ddaf6ad92b.js"></script>
112
113<turbo-frame data-turbo="true" id="analytic_tags">
114
115<script src="https://d32hgpjj5y625p.cloudfront.net/assets/custom_tracking-31af88ace985edb56eb121c6755d1a01a338931beedac126e877338b80684370.js"></script>
115
116</turbo-frame>
117</head>
118<body class="book_modules_controller show_action " data-turbo="false">
119<main role="main">
120<div class="standalone-book d-flex flex-column min-vh-100" itemscope="" itemtype="https://schema.org/Book">
121<div class="header my-lg-2">
122
123<nav class="navbar navbar-expand-lg py-1 d-flex justify-content-between flex-wrap container">
124<div class="author-name text-wrap mb-0 left-aligned">
125<a class="text-reset text-decoration-none m-0 p-0" href="/">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series
126</a></div>
127<button class="d-block d-lg-none btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse">
128<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
129<path d="M1 2H19"  stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
130<path d="M1 9H19"  stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
131<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
132<path d="M1 2H19"  stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
133<path d="M1 9H19"  stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
134<path d="M1 16H19" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
135</svg>
136
137</button>
138<div class="collapse navbar-collapse navbar-nav-scroll flex-grow-0 flex-wrap mh-100">
139<div class="mobile-menu-header d-flex d-lg-none align-items-center justify-content-between px-2 px-md-6 pt-3">
140<a class="author-name text-reset text-decoration-none mb-0" href="/">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</a>
141<button class="btn p-0" data-bs-target=".navbar-collapse" data-bs-toggle="collapse">
142<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
143<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
144<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
145<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
146<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
147</svg>
148
149</button>
150</div>
151<ul class="navbar-nav mt-1 mt-lg-0 px-2 px-md-6 n">
152<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/about">About</a></li>
153
154<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/books">Books</a></li>
155
156<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" href="/series">Series</a></li>
157
158<li class="nav-item py-1 py-lg-0 font-body-medium"><a class="nav-link" target="_blank" rel="noopener" href="https://parttimeparisian.substack.com/?subscribe=true&amp;utm_source=johnpearcebooks&amp;utm_medium=author_site&amp;utm_campaign=primary_subscribe">Free Updates</a></li>
159
160<li class="nav-item d-flex pt-2 pt-lg-0 gap-2 gap-lg-0 justify-content-center">
161<a target="_blank" name="BookBub" class="nav-link d-flex align-items-center" href="https://www.bookbub.com/authors/john-pearce"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
162	 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px">
163<path d="M34.2,20.9c0.7-0.5,1-1.3,1-2.3c0-1.8-1.3-2.7-3.8-2.7h-2.2v5.8h2.3C32.7,21.8,33.6,21.5,34.2,20.9z"/>
164<path d="M14.6,25.1h-2.8v6.5h3c1.3,0,2.3-0.3,3-0.9c0.7-0.6,1.1-1.4,1.1-2.4C18.8,26.1,17.4,25.1,14.6,25.1z"/>
165<path d="M16.9,20.9c0.7-0.5,1-1.3,1-2.3c0-1.8-1.3-2.7-3.8-2.7h-2.2v5.8h2.3C15.3,21.8,16.2,21.5,16.9,20.9z"/>
166<path d="M24.1,0.3C11.2,0.3,0.7,10.8,0.7,23.8c0,12.9,10.5,23.4,23.4,23.4s23.4-10.5,23.4-23.4C47.5,10.8,37,0.3,24.1,0.3z
167	 M21.2,33.1c-1.4,1.2-3.3,1.8-5.7,1.8H7.5V12.6h7.6c2.3,0,4.1,0.5,5.4,1.4c1.3,0.9,1.9,2.2,1.9,3.8c0,1.2-0.4,2.2-1.1,3.2
168	c-0.8,0.9-1.8,1.6-3.1,2v0c1.6,0.2,2.8,0.8,3.7,1.8c0.9,1,1.4,2.2,1.4,3.6C23.3,30.3,22.6,31.9,21.2,33.1z M38.5,33.1
169	c-1.4,1.2-3.3,1.8-5.7,1.8h-7.9V12.6h7.6c2.3,0,4.1,0.5,5.4,1.4c1.3,0.9,1.9,2.2,1.9,3.8c0,1.2-0.4,2.2-1.1,3.2
170	c-0.8,0.9-1.8,1.6-3.1,2v0c1.6,0.2,2.8,0.8,3.7,1.8c0.9,1,1.4,2.2,1.4,3.6C40.7,30.3,40,31.9,38.5,33.1z"/>
171<path d="M32,25.1h-2.8v6.5h3c1.3,0,2.3-0.3,3-0.9c0.7-0.6,1.1-1.4,1.1-2.4C36.1,26.1,34.7,25.1,32,25.1z"/>
172</svg>
173
174</a><a target="_blank" name="Facebook" class="nav-link d-flex align-items-center" href="https://www.facebook.com/JohnPearceFL"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
175	 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px">
176<g>
177	<path class="st0" d="M24,0C10.7,0,0,10.7,0,24c0,11.3,7.7,20.7,18.2,23.3v-16h-4.9V24h4.9v-3.2c0-8.2,3.7-12,11.7-12
178		c1.5,0,4.1,0.3,5.2,0.6v6.6c-0.6-0.1-1.6-0.1-2.8-0.1c-3.9,0-5.5,1.5-5.5,5.4V24h7.8l-1.3,7.3h-6.5v16.5C38.8,46.4,48,36.3,48,24
179		C48,10.7,37.3,0,24,0z"/>
180</g>
181</svg>
182
183</a><a target="_blank" name="X" class="nav-link d-flex align-items-center" href="https://www.X.com/JohnPearceFL"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
184	 viewBox="0 0 48 48" style="fill: currentColor; stroke: currentColor; vertical-align: middle; " xml:space="preserve" width="24px" height="24px">
185<path class="st0" d="M36.7,3.8h6.7L28.7,20.7L46,43.6H32.4L21.8,29.7L9.6,43.6H2.9l15.8-18L2,3.8h13.9l9.6,12.7L36.7,3.8z
186	 M34.3,39.5H38L13.9,7.6h-4L34.3,39.5z"/>
187</svg>
188
189
190
191</a></li>
192
193</ul>
194</div>
195</nav>
196</div>
197
198
199<div class="website-content container">
200<div class="book-module row my-4 my-lg-8 gx-md-10">
201<div class="col-md-4 text-center text-md-start">
202<div class="cover-image-wrapper book-cover-237901">
203<a title="Paris Reckoning (Sandi Brennan Book 1)" class="d-flex justify-content-center text-reset text-decoration-none h-100" href="/books/paris-reckoning-sandi-brennan-book-1"><img class="cover-image img-fluid" alt="Paris Reckoning (Sandi Brennan Book 1)" itemprop="image" width="638" height="957" loading="lazy" src="https://res.cloudinary.com/wellfleet/image/upload/c_fill,f_auto,q_auto,w_638/g0vmujgmlz9qyjjahgo3kmuor6d7" />
204</a></div>
205
206</div>
207<div class="col-md-8 pt-3 pt-md-0">
208<div class="mb-1">
209<div class="font-body-large">
210Book #1 from the series: 
211<a itemprop="isPartOf" href="/series/sandi-brennan-series">Sandi Brennan Series</a>
212</div>
213
214</div>
215<h1 class="text-break font-logo-large" itemprop="name">Paris Reckoning (Sandi Brennan Book 1)</h1>
216<div class="font-body-large"></div>
217<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer">
218<meta content="Amazon" itemprop="seller">
219<meta content="https://www.amazon.com/dp/B0H2KZ5P6M" itemprop="url">
220</div>
221<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer">
222<meta content="Amazon UK" itemprop="seller">
223<meta content="https://www.amazon.co.uk/dp/B0H2KZ5P6M" itemprop="url">
224</div>
225<div itemprop="offers" itemscope="" itemtype="https://schema.org/Offer">
226<meta content="Amazon CA" itemprop="seller">
227<meta content="https://www.amazon.ca/dp/B0H2KZ5P6M" itemprop="url">
228</div>
229<div itemprop="author" itemscope="" itemtype="https://schema.org/Person">
230<meta content="John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series" itemprop="name">
231<div class="mt-4 retailer-btn-container">
232<div class="d-flex align-items-center flex-wrap gap-2">
233<button class="btn btn-primary retailer-cta-btn retailer-link-btn" data-bs-target="#retailer-links-modal-237901" data-bs-toggle="modal" type="button">Buy Now</button>
234</div>
235<div aria-hidden="true" aria-label="Choose your retailer" class="modal retailer-links-modal website-content" id="retailer-links-modal-237901" role="dialog" tabindex="-1">
236<div class="modal-dialog" role="document">
237<div class="modal-content px-2 px-md-5 py-2 py-md-4 bg-blend-95 border-blend-90">
238<div class="modal-header border-0">
239<button class="bg-transparent border-0 text-reset ms-auto" data-bs-dismiss="modal" title="Close" type="button">
240<svg width="1em" height="1em" style="fill: none; stroke: currentColor; vertical-align: middle; " viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
241<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
242<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
243<path d="M1 1L17 17" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
244<path d="M1 17L17 1" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
245</svg>
246
247</button>
248</div>
249<div class="modal-body font-body-large">
250<h3 class="font-logo-medium mb-3">Choose Your Retailer</h3>
251<ul class="list-unstyled d-flex flex-wrap mx-n1">
252<li class="col-12 col-md-4">
253<div class="p-1">
254<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.com/dp/B0H2KZ5P6M">Amazon</a>
255
256</div>
257</li>
258<li class="col-12 col-md-4">
259<div class="p-1">
260<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.co.uk/dp/B0H2KZ5P6M">Amazon UK</a>
261
262</div>
263</li>
264<li class="col-12 col-md-4">
265<div class="p-1">
266<a target="_blank" data-book-title="Paris Reckoning (Sandi Brennan Book 1)" rel="noopener" class="track-retailer-link btn btn-primary retailer-link-btn px-4" href="https://www.amazon.ca/dp/B0H2KZ5P6M">Amazon CA</a>
267
268</div>
269</li>
270</ul>
271</div>
272</div>
273</div>
274</div>
275
276
277</div>
278</div>
279<h2 class="font-header-medium text-uppercase my-3">About</h2>
280<div class="font-body-large text-break rich-text" itemprop="description">
281<p><strong>She survived Africa. Paris may finish the job.</strong></p><p>Sandrine Brennan spent two decades earning ever-bigger jobs in the U.S. Army — and turned down a near-certain promotion to full colonel to take on the biggest of all: CEO of a well-funded new security firm with deep ties to the CIA, headquartered in Paris. She’s even persuaded Eddie Grant — the billionaire Franco-American businessman who was a decorated Special Forces commander during the First Gulf War — to run her European operations.</p><p>Her last assignment before making the leap had taken her deep into the Sahel, the arid belt across central Africa where Russia’s Wagner Group was buying governments and moving drugs. She survived it. Now she’s in Paris, finally, and for the first time in years she’s letting herself want something beyond the next mission.</p><p>Then Steve disappears.</p><p>He was a fellow student at Gran’Langue, Eddie’s language school on the Left Bank. Charming, private, obviously connected to the intelligence world he wouldn’t quite admit. She convinced herself he was the love of her life, but now he’s gone — leaving behind a photograph, a transferred account she didn’t ask for, and no explanation at all.</p><p>Sandi’s search takes her from the polished salons of the 7th arrondissement to Luxembourg and back to the stone passages below Paris — toward a conspiracy that connects the drug pipeline she tracked in Africa to a corruption operation reaching into the highest levels of West African governments. Someone is making a great deal of money. Someone is also very interested in stopping her.</p><p><em>Paris Reckoning</em> is the first book in the Sandi Brennan series, set within the world of John Pearce’s acclaimed Eddie Grant Saga. If you’re meeting Sandi for the first time, you won’t need Eddie to follow her — but Eddie’s readers will feel right at home.</p>
282</div>
283<h2 class="font-header-medium text-uppercase my-3">Trailer</h2>
284<iframe allow="encrypted-media; picture-in-picture" allowfullscreen="" class="trailer-iframe" frameborder="0" height="315" src="https://www.youtube.com/embed/v6IYF26cEyk" width="560"></iframe>
285<div class="mt-3"><div class="book-reviews">
286<h4 class="reviews-header text-uppercase font-header-medium">Praise for this book</h4>
287<figure class="book-review mt-4 px-4 py-2">
288<blockquote class="blockquote font-body-large mb-2">
289<p>"John Pearce's new novel Paris Reckoning introduces us to one of crime fiction's most compelling new protagonists. The threat she uncovers connects corrupt West African networks to lethal Russian expansionism. It could not be more contemporary or more chilling. Pearce brings to this latest novel the same sure hand and deep knowledge of Paris that set the Eddie Grant novels apart. Sandi Brennan shines bright in the City of Light." </p>
290</blockquote>
291<figcaption class="blockquote-footer header-font text-reset text-uppercase">David Downie, author of Clear, Cool, Sweet Water and Paris, Paris</figcaption>
292</figure>
293</div>
294</div>
295</div>
296</div>
297</div>
298<div class="mt-auto container"><div class="footer position-relative border-top border-blend-80 mt-8 mb-2 pt-2" id="footer-module">
299<div class="d-flex flex-wrap font-body-small">
300<div class="mb-1 mb-md-0">
301<strong>
302Copyright
3032026
304</strong>
305&nbsp;<a class="text-reset text-decoration-none amp-link" href="https://johnpearcebooks.com">John Pearce, author of the Eddie Grant Saga and Sandi Brennan Series</a>&nbsp;
306</div>
307<div class="mb-2 mb-md-0 me-auto">
308<div class="d-inline opacity-75">
309<div class="d-none d-md-inline">
310|
311</div>
312Built with
313<a target="_blank" class="text-reset text-decoration-none amp-link" href="https://authorwebsites.bookbub.com?source=ausite_ref">Author Websites by BookBub</a>
314</div>
315</div>
316<div class="ms-md-1 d-flex gap-2">
317
318</div>
319<div class="footer-icons d-flex align-items-center gap-2 mt-2 mt-md-0 ms-md-3">
320<a title="rss" class="opacity-50 text-reset d-flex align-items-start" href="/feed.xml"><svg width="16px" height="16px" style="fill: none; stroke: none; vertical-align: middle; margin-top:3px;" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
321<path fill-rule="evenodd" clip-rule="evenodd" d="M5 17C5 18.104 4.104 19 3 19C1.896 19 1 18.104 1 17C1 15.896 1.896 15 3 15C4.104 15 5 15.896 5 17Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
322<path d="M1 7C7.627 7 13 12.373 13 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
323<path d="M1 1C10.941 1 19 9.059 19 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
324</svg>
325
326</a></div>
327</div>
328</div>
329</div>
330</div>
331
332
333
334</main>
335</body>
336</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.